Django 从 views.py 中动态获取 PK



我有一个视图,它呈现了一个注释表单和一个模板:

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')

您可以从视图中经过验证的数据访问它。

最新更新