微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将新创建的文件附加到模型

如何解决如何将新创建的文件附加到模型

用户添加一个视频,水印会自动应用到视频中。结果是处理用户的视频并加水印,但我不知道如何把这个视频附加到模型上,这样以后这个带水印的视频就会显示在网站。只需将 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 举报,一经查实,本站将立刻删除。