我需要将用户绑定到他们的帖子上,但是视频上传表单的字段中未包含“作者”,因此保存表单时我无法访问该字段。
当我在字段中添加“作者”时,会显示一个下拉框。 (用户只能以自己的名义发布用户的信息)我尝试只列出各个字段,例如{{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)
答案 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