Django信号post_save更新

时间:2014-11-01 14:38:15

标签: django django-models django-signals

我有一个与目录模型具有OnetoOne关系的文章模型。

我当前的功能有文章模型,在post_save上创建一个具有相同名称的目录模型。我想做另一个功能,其中Article FK从null变为更新到现在可用的同名Catalog实例。

这是我到目前为止所做的:

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')

上面的代码工作正常。创建Article模型实例后,它将创建同名的Catalog实例。我现在想要将新创建的文章与FK关系更新为新创建的Catalog实例。我认为我的逻辑很接近,但我无法让它发挥作用。

@receiver(post_save, sender=Catalog)
def attach_catalog(sender, **kwargs):
    if kwargs.get('created', False):
        Article.objects.latest('id').update(catalog=kwargs.get('instance'))

1 个答案:

答案 0 :(得分:6)

我能够使用以下内容:

@receiver(post_save, sender=Catalog)
def attach_catalog(sender, **kwargs):
    if kwargs.get('created', False):
        b = Article.objects.latest('id')
        Article.objects.filter(pk=b.id).update(catalog=kwargs.get('instance'))