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