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