2011-10-15 187 views
0

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

我的问题是,当我使用admin从关系(艺术),对孤儿状态变化的另一面释放的标题标题不反映,除非我通过标题保存例程。每当用户将标题相关艺术改为新标题或者根本没有标题时,是否有办法从艺术模型中自动更新caption.is_orphan

+0

我不明白你想要什么,但我想,而不是标题和'self.is_orfan你需要重写保存艺术模型的方法, '你改变'self.caption.is_orphan'。我可以看到艺术的模型结构吗? –

回答

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() 
+0

谢谢西蒙。有效。我在示例的最后添加了三行来更新新分配或新创建的标题。 – AndrewE