【问题标题】:ModelForm is not insert data correctlyModelForm 未正确插入数据
【发布时间】:2014-03-01 16:47:40
【问题描述】:

我有一个用于评论和新闻报道的数据库表。添加评论的表单是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 请求,然后在保存数据之前尝试验证数据。当我将打印语句添加到代码中时,我会在日志中显示表单已验证并且数据库表注释已更新,但是当我提取有关故事的数据库时,它不会显示任何与该故事相关的 cmets。

我也尝试用Story表的外键交换字段,所以在NewForm类中使用了Story表上的cmets属性而不是comment_text,但随后我在数据库表Story中没有得到任何值或评论,它只是说它验证并且它不更新 cmets 字段......但是它确实创建了一个全新的故事,其中除了字段 date_added 和 data_modified 之外的所有空字段。

显然我在这里误解了一些东西,有人可以告诉我我做错了什么吗?我已经阅读了有关查询、外键关系、相关管理器等的 django 文档,但显然我误解了一些东西......

【问题讨论】:

    标签: python mysql sql django


    【解决方案1】:

    而不是故事有

    comments = models.ForeignKey(Comments)
    

    将此添加到 Comment 类中:

    story = models.ForeignKey(Story, related_name='comments')
    

    您还需要在保存评论时为此字段设置一个值。

    然后,Django 允许您访问这样的故事的 cmets(例如在视图代码中):

    story.comments.all()
    

    【讨论】:

    • 在尝试了几次之后,我不明白您的意思,您能否进一步解释一下。您是否希望我在 Story 表中没有任何 cmets 属性,而在包含 cmets 的 Comment 表中只有一个 story 属性?当我实现表单永远不会验证时,我试图将数据插入到您在上面指定的故事外键属性中
    • 只是补充一下,我已经添加了 form.cmets.errors 字段,但没有打印出来...我在其他表单上使用它并且效果很好,但这次它没有输出任何内容跨度>
    • 只是为了说明,我不是要计算 cmets,而是要保存并显示所有的 cmets
    • 发现了验证错误,但是您正在编写的是将数据直接插入外键,这是一个必须等​​于故事的整数..而不是如何保存我的评论文本是在之后..无论如何还是谢谢,但它是我需要保存的文本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    相关资源
    最近更新 更多