我有一个视图,它呈现了一个注释表单和一个模板:
views.py
def news(request):
if request.method == "POST":
form = CommentForm(request.POST)
if form.is_valid():
comment = form.save(commit=False)
comment.post = Article.objects.get(pk=2)
print(comment.post)
comment.author = request.user.username
comment.save()
return HttpResponseRedirect('')
else:
form = CommentForm()
return render(request, '../templates/news.html', context={"form": form})
models.py
class Comment(models.Model):
post = models.ForeignKey(Article, on_delete=models.CASCADE, related_name='comments', blank=True)
author = models.TextField()
text = models.TextField()
def __str__(self):
return self.text
forms.py
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ('text',)
在 views.py 中,comment.post被分配给 Article 对象,我希望动态应用 pk。我尝试在模板中执行此操作,其中将 {{ article.pk }} 放入模板中会为 Article 对象输出正确的 pk,但我不确定如何将其应用于我的表单。
模板看起来很简单:文章对象,下面是评论表单。
问题很简单,我希望news(request(函数动态应用当前文章对象的pk,以使评论转到正确的帖子。
如果路径是唯一的,则可以使用该路径,也可以只添加一个隐藏字段并将文章 pk 设置为值:
<input name="post" type="hidden" value={{ article.pk }} />
和您的表格:
class CommentForm(ModelForm):
class Meta:
model = Comment
fields = ('text', 'post')
您可以从视图中经过验证的数据访问它。