Как мне к модели прицепить вновь созданный файл
Пользователь добавляет видео и автоматически на видео накладывается водяной знак. Обработать видео пользователя и поставить водяной знак получается, а как это видео к модели прицепить не знаю, чтоб потом это видео с водяным знаком на сайте отображалось. Просто прикрепить к модели obj.video_uploaded = final_ - не получается, пишет ошибка object has no attribute '_committed'
model.py
class Video(models.Model):
title = models.CharField(max_length=100)
slug = AutoSlugField(populate_from='title')
photo = models.ImageField(upload_to='photo/%Y/%m/%d')
video_uploaded = models.FileField(upload_to='video/%Y/%m/%d',blank=True,null=True)
views.py
def add_video(request):
if request.method == "POST":
form = VideoUploaderForm(
data=request.POST,
files=request.FILES,
)
if form.is_valid():
obj = form.save(commit=False)
vid = request.FILES['video_uploaded']
clip = VideoFileClip(vid.temporary_file_path())
# watermark
video = VideoFileClip(clip.filename)
logo = (ImageClip('faiklogo.png')
.set_duration(video.duration)
.resize(height=50)
.margin(right=8, top=8, opacity=0)
.set_pos(("center", "bottom")))
final_ = CompositeVideoClip([video, logo])
final_.write_videofile('media/video/videwithwatermark.mp4')
obj.save()
else:
form=VideoUploaderForm()
return render(request, 'firstapp/add_video.html', {"foenter code hererm": form})
form.py
class VideoUploaderForm(forms.ModelForm):
class Meta:
model = Video
fields = '__all__'
Ответы (2 шт):
Автор решения: Za Ars
→ Ссылка
Ответ взят отсюда
class Document(models.Model):
file = FileField(upload_to=get_document_path)
description = CharField(max_length=100)
doc = Document()
doc.file.name = 'path/to/file' # must be relative to MEDIA_ROOT
doc.file
<FieldFile: path/to/file>
То есть в вашем случае это будет так:
obj.video_uploaded.name = 'video/videwithwatermark.mp4'
# obj.video_uploaded.save() # Если не сохранится
obj.save()
Автор решения: Алексей Александрович
→ Ссылка
Получилось методом тыка!!!
obj.video_uploaded = 'videwithwatermark.mp4'
obj.save()