我有一个数据库表,用于评论和新闻报道。添加注释的表单是ModelForm,我只包含comment_text字段。
型号:
class Story(models.Model):
date_added = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
title = models.CharField(max_length=150)
description = models.CharField(max_length=2000)
story_text = models.TextField()
comments = models.ForeignKey(Comments)
def __unicode__(self):
return self.title
class Comment(models.Model):
date_added = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
emailOnReply = models.NullBooleanField(blank=True, null=True)
comment_text = models.TextField()
def __unicode__(self):
return self.comment_text
形式:
class NewComment(ModelForm):
""" Form for adding a new comment """
class Meta:
model = Comment
fields = ['comment_text']
widgets = {
'comment_text': Textarea(attrs={'class': 'form-control'}),
}
视图只检查是否收到POST请求,然后在保存数据之前尝试验证数据。当我在代码中添加print语句时,我会在日志中获得表单验证并更新数据库表注释,但是当我提取有关故事的数据库时,它不会显示任何与故事相关的评论。
我还尝试用Story表的外键交换字段,因此Story表上的comments属性用于NewForm类而不是comment_text,但是后来我在数据库表Story中没有得到任何值。评论,它只是说它验证并且它没有更新评论字段...然而它创建了一个全新的故事,除了字段date_added和data_modified之外的所有空字段。
显然我在这里误解了一些东西,有人能让我知道我做错了什么吗?我已经阅读有关查询,外键关系船,相关经理等的django文档,但显然我误解了一些东西......
答案 0 :(得分:0)
而不是故事
comments = models.ForeignKey(Comments)
将其添加到Comment类:
story = models.ForeignKey(Story, related_name='comments')
保存评论时,您还需要为此字段设置一个值。
然后Django允许您访问这样的故事的评论(例如在视图的代码中):
story.comments.all()