django - 添加新记录时更新其他模型字段
问题描述
我正在做问答网站。在那里,每当为该问题添加新答案时,我都想标记 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 ?
解决方案
与其拥有像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")
...
推荐阅读
- java - 设置 recyclerView 项目高度 wrap_content
- c# - 通过类的字符串名称将 JSON 对象反序列化为运行时动态创建的特定实例
- mysql - JOIN 语句的数量如何影响查询的持续时间/获取时间?我有一个简单的、反直觉的例子
- python-3.x - 根据行值合并数据框
- ocr - 正方体无法识别随机英文字符序列
- neo4j - 临时创建节点和关系?
- javascript - 如何在 Java 中使用 GraalVM?类未找到异常
- swift - 从 Firebase 数据库中获取直接后代
- perl - Perl 创建动态嵌套哈希
- php - 更改单一产品 stock.php woocommerce 会破坏网站,