2011-10-15 143 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