2017-03-06 33 views
0

我有两种型号:ReverseOneToOne在Django信号不评估

class Content(models.Model): 
    text = models.TextField(blank=True, null=True) 

class Article(models.Model): 
    content = models.OneToOneField(Content, related_name="article_content") 

和信号(在信号模块中声明,并通过AppConfig.ready()连接:

def clear_cache(sender, **kwargs): 
    print(sender.article_content.pk) 

post_save.connect(clear_cache, sender=Content) 

当我保存内容AttributeError: 'ReverseOneToOneDescriptor' object has no attribute 'pk'提高

art = Article.objects.get(pk=1) 
ct = art.content # content exists 
ct.save() 

所以我的问题:

  1. 为什么得到相关的描述符返回链接对象的实例比比皆是,但不是在我的信号
  2. 我怎么能(通过一个ForeignKey无需更换我的OneToOneField)访问我的相关对象的信号内

我ve设置minimal project重现此行为

回答

1

sender该信号附加到,而不是正在保存的实例。这是在kwargs['instance'],或者你可以直接接受参数:

def clear_cache(sender, instance, created, **kwargs): 
    print(instance.article_content.pk) 
+0

我真是笨!谢谢。 – jmbarbier