我正在开发一个系统,用户需要匹配多个模型的模型字段。为了帮助他们,我创建了一个“is_orphan”布尔字段来指示所需的关系(在这种情况下为ForeignKey)是否应该存在但尚未存在。它作为保存例程的一部分进行更新 - 例如:
class Caption(models.Model):
caption = models.TextField()
is_orphan = models.BooleanField()
def save(self, *args, **kwargs):
art_set = self.art_set.all()
if len(art_set) != 0:
self.is_orphan = False
else:
self.is_orphan = True
super(Caption, self).save(*args, **kwargs)
我的问题是,当我使用管理员从关系的另一侧(Art)释放标题时,除非我通过标题保存例程,否则不会反映标题的孤立状态的变化。每当用户将标题相关艺术更改为新标题或根本没有标题时,是否有办法在艺术模型中自动更新caption.is_orphan
?
答案 0 :(得分:0)
在艺术模型的save
方法中:
def save(self, *args, **kwargs):
old_caption = None
if self.id:
old_caption = Art.objects.get(id=self.id).caption
super(Art, self).save(*args, **kwargs)
if old_caption and (self.caption != old_caption):
if old_caption.art_set.all():
old_caption.is_orphan = False
else:
old_caption.is_orphan = True
old_caption.save()