如何解决如何将新创建的文件附加到模型
用户添加了一个视频,水印会自动应用到视频中。结果是处理用户的视频并加水印,但我不知道如何把这个视频附加到模型上,这样以后这个带水印的视频就会显示在网站。只需将 obj.video_uploaded = final_ 附加到模型 - 它不起作用,写入错误对象没有属性 '_committed' 模型.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__'
解决方法
当保存到 FileField 时,FieldFile 的一个实例会让你使用 instance.save(file_name,file_contents) 保存它,其中的内容必须是 django.core.files.File的一个实例> 或 django.core.files.base.ContentFile 试试:
from django.core.files.base import ContentFile
obj.video_uploaded.save(final_.name,ContentFile(final_.read()))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。