首页 > 解决方案 > 添加新记录时更新其他模型字段

问题描述

我正在做问答网站。在那里,每当为该问题添加新答案时,我都想标记 Question hasAnswered 。

问题模型

class Question(models.Model):

    question = models.CharField(max_length=400)
    uid = models.ForeignKey("User",on_delete=models.SET_DEFAULT,default=1,related_name='user_q_id_set')
    vote = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    catitle = models.ForeignKey("Category", on_delete=models.CASCADE)
    editUser = models.ManyToManyField("User",related_name='user_q_edit_set',null=True,blank=True)
    hasAnswer = models.BooleanField(default=False)

答案模型

class Answer(models.Model):
    answer = models.TextField()
    qid = models.ManyToManyField("Question")
    uid = models.ForeignKey("User",on_delete=models.CASCADE,related_name='user_a_id_set')
    vote = models.IntegerField(default=0)
    created_at = models.DateTimeField(auto_now_add=True)
    editUser = models.ManyToManyField("User",related_name='user_a_edit_set',null=True,blank=True)

    class Meta:
        ordering = ['-vote']

    def save(self,*args, **kwargs):
        self.qid.hasAnswer=True

这是我尝试过的,但出错了

ValueError at /admin/qa/answer/add/
"<Answer: None>" needs to have a value for field "id" before this many-to-many relationship can be used.

那么,每当添加新的答案时,我如何将 hasAnswer 更改为 True ?

标签: djangomodeldjango-orm

解决方案


与其拥有像Question.hasAnswer您这样的字段,不如使用该关系的属性:

class Question(models.Model):
    ...
    @property
    def has_answer(self):
        return self.answers.exists()


class Answer(models.Model):
    ...
    questions = models.ManyToManyField("Question", related_name="answers")
    ...

推荐阅读