ReverseOneToOne未在Django符号中求值

2024-03-28 17:51:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号:

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准备就绪():

^{pr2}$

当我保存内容时,AttributeError: 'ReverseOneToOneDescriptor' object has no attribute 'pk'被引发

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

所以我的问题是:

  1. 为什么获取相关描述符到处都返回链接对象实例而不是在我的信号中
  2. 如何访问信号内的相关对象(不使用外键替换OneToOneField)

我设置了minimal project来重现这种行为


Tags: 对象texttruemodel信号modelsarticlecontent
1条回答
网友
1楼 · 发布于 2024-03-28 17:51:52

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

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

相关问题 更多 >