我有一个与目录模型具有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'))
答案 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'))