与Django OneToOneField相关的名称适用于一种模型,不适用于另一种模型

时间:2020-05-15 19:03:47

标签: python django django-models one-to-one

我有一个项目,每个项目都有常见的类似于商店的问答和评论功能。该应用程序不仅比这复杂,但这是问题的症结所在。这是基本模型和应用设置:

# Q&As App
Class Question(models.Model):
    ...

# Reviews App
Class Review(models.Model):
    ...

# Items App
Class Item(models.Model):
    ...

Class ItemQuestion(models.Model):
    question = models.OneToOneField(Question, related_name='item_question')
    item = models.ForeignKey(Item, related_name='questions')
    ...

Class ItemReview(models.Model):
    review = models.OneToOneField(Review, related_name='item_review')
    item = models.ForeignKey(Item, related_name='reviews')
    ...

使用反向查找时会出现此问题:

Question().item_question # Raises Question.item_question.RelatedObjectDoesNotExist: Question has no item_question
Review().item_review # Returns ComponentReview instance                                                                               

详细的堆栈跟踪:

Traceback (most recent call last):
  File ".../site-packages/django/db/models/fields/related_descriptors.py", line 415, in __get__                                                                                        
    self.related.get_accessor_name()
Question.item_question.RelatedObjectDoesNotExist: Question has no item_question

我对设计决策替代方案或类似的事物不感兴趣,但更多地试图了解这种情况的发生。查看模型设置和迁移文件,就代码实现而言,一切看起来都是相同的,那么为什么一个反向查找有效而另一个反向查找无效?我如何才能同时工作?

谢谢!

Django 2.2版

0 个答案:

没有答案