如何使用模型表格自动填充作者(视频上传)

时间:2019-08-05 18:42:15

标签: django django-models django-forms django-views

我需要将用户绑定到他们的帖子上,但是视频上传表单的字段中未包含“作者”,因此保存表单时我无法访问该字段。

当我在字段中添加“作者”时,会显示一个下拉框。 (用户只能以自己的名义发布用户的信息)我尝试只列出各个字段,例如{{form.title}}来保留作者字段,但不向用户显示,无论如何都显示出来。

在VideoPost模型的'作者'字段中,我尝试更改默认版本null=True的{​​{1}},其中default=None, default=0, default='None', default=User, default=User.id

当我使用User = get_user_model()时,作者下拉框中包含当前用户名,但仍然可以选择,当我尝试发布时,我得到了 default='None'

此外,我在views.py中尝试了ValueError: invalid literal for int() with base 10: 'None' 并得到form = VideoPostForm(request.user,request.POST or None, request.FILES or None),这是由CustomUser object has no .get() attribute

引起的

我觉得这可能对其他人来说很明显,但是我一直在盯着这段代码来弄清楚它。(每天几个小时进行研究并更好地理解所有事情我实际上是在“幕后”工作,我在其他地方工作,同时试图弄清楚这一点,因为开发速度很重要,实际上我可以弄清楚其他东西)

forms.py

form.save()

views.py

class VideoPostForm(forms.ModelForm):

    class Meta:
        model = VideoPost
        fields = ['author','title', 'description', 'file']

models.py

def upload_video(request):
    form = VideoPostForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.save(commit=False)
        VideoPost.author = request.user
        form.save()
        return redirect('home')
    else:
        form = VideoPostForm()
    return render(request, 'upload_video.html', {'form': form})

模板(作者字段除外)

class VideoPost(models.Model):
    objects = models.Manager()
    author = models.ForeignKey(User, related_name='video_post', on_delete=models.CASCADE, null=True)
    title = models.CharField(max_length=50, null=True, blank=True)
    published_date = models.DateTimeField(auto_now_add=True)
    description = models.TextField()
    validate_file = FileValidator(max_size=52428800)
    file = models.FileField(upload_to='videos/', validators=[validate_file])


    def __str__(self):
        return 'Post by {}'.format(self.author)

1 个答案:

答案 0 :(得分:1)

def upload_video(request): if request.method == "POST": form = VideoPostForm(request.POST, request.FILES or None) if form.is_valid(): new_videopost = form.save() new_videopost.author = request.user new_videopost.save() return redirect('home') else: form = VideoPostForm() return render(request, 'upload_video.html', {'form': form}) 非常接近。 form.save() method返回VideoPost的实例。然后,您可以将作者设置为当前用户,直接设置为由表单创建的新视频帖子对象。请参见下面的代码示例。

views.py

find