更新模型以反映对其他模型的更改

时间:2011-10-15 15:02:36

标签: python django django-models django-admin

我正在开发一个系统,用户需要匹配多个模型的模型字段。为了帮助他们,我创建了一个“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

1 个答案:

答案 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()