Обновление моделей для отражения изменений в других моделях - PullRequest
0 голосов
/ 15 октября 2011

Я разрабатываю систему, в которой пользователям необходимо сопоставлять поля моделей из нескольких моделей.Чтобы помочь им, я создал логическое поле «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 изнутри модели Art, когда пользователь изменяет заголовок, связанный с искусством, на новый заголовок или вообще без заголовка?

1 Ответ

0 голосов
/ 15 октября 2011

В методе 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()
...