1
我有一個與目錄模型具有OnetoOne關係的文章模型。Django信號post_save更新
我目前的功能是在post_save上的Article模型中創建一個具有相同名稱的Catalog模型。我想在文章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')
上面的代碼工作正常。一旦創建Article模型實例,它將創建一個具有相同名稱的Catalog實例。我想現在將新創建的Article與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'))
爲什麼不重寫文章'save'方法,而不是使用信號?由於相關目錄是爲新文章自動生成的,因此您可以在重寫的保存方法中創建新目錄並同時填充關係。 – Fiver 2014-11-01 15:05:55
這是有道理的替換第一個post_save,但我認爲附加目錄只能在目錄實例存在 – byrdr 2014-11-01 15:53:42