2017-03-06 32 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