У меня есть модель статьи, которая имеет отношения OnetoOne с моделью каталога.Сообщение Django post_save update
Моя текущая функциональность имеет модель статьи, на post_save, создает модель каталога с тем же именем. Я хотел бы сделать еще немного функциональности, когда статья FK переходит от нулевого значения к обновлению к теперь доступному экземпляру каталога с тем же именем.
Вот то, что я до сих пор:
class Catalog(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField()
def __unicode__(self):
return self.name
class Article(models.Model):
catalog = models.OneToOneField(Catalog, related_name='article_products', blank=True, null=True)
title = models.CharField(max_length=200)
def __unicode__(self):
return unicode(self.title)
@receiver(post_save, sender=Article)
def create_catalog(sender, **kwargs):
if kwargs.get('created', False):
Catalog.objects.get_or_create(name=kwargs.get('instance'), price='10')
Приведенный выше код работает правильно. После создания экземпляра модели статьи создается экземпляр каталога с тем же именем. Я хотел бы обновить недавно созданную статью с привязкой FK к только что созданному экземпляру Каталога. Я думаю, что моя логика ниже, но я не могу заставить ее работать.
@receiver(post_save, sender=Catalog)
def attach_catalog(sender, **kwargs):
if kwargs.get('created', False):
Article.objects.latest('id').update(catalog=kwargs.get('instance'))
Почему не отменяет статью 'save' метод вместо использования сигналов? Поскольку связанный каталог автоматически генерируется для новых статей, вы можете создать новый каталог в методе переопределенного сохранения и одновременно установить связь. – Fiver
Это имеет смысл для замены первого post_save, но я думаю, что привязка каталога может быть выполнена только после того, как экземпляр каталога существует – byrdr