我有以下模型。(我只包括实际完整定义的一部分,因为其余部分与问题无关。
class Event(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
created_at = models.DateTimeField(auto_now_add=True)
last_updated = models.DateTimeField()
title = models.CharField(max_length=255)
description = models.TextField(blank=True, null=True)
class Translation(models.Model):
event = models.ForeignKey(Event, related_name="translation_event", on_delete=models.CASCADE, null=True)
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
我想在Event表上创建一个查询集,然后将其与转换后的数据连接起来。换句话说,我希望在Event表和Translation表之间有一个左外连接。
如果我在Event表上有一个查询集(名为queryset
),根据我看到的一些示例以及文档的理解,我应该能够执行以下操作:
queryset = queryset.select_related("translation_event")
for event_obj in queryset:
print(event_obj.title)
print(event_obj.translation_event.title)
然而,当Django到达for event_obj in queryset:
行时,它抛出一个异常:
django.core.exceptions.FieldError:select_related中给出的字段名无效:'translation_event'。
(It然后列出一些有效的字段名称,即事件表中与其他表具有外键关系的字段。)
看起来好像select_related
允许从Event表到其他表,但不允许外键在第二个表中的另一个方向--尽管它应该这样做。
任何帮助将不胜感激。
1条答案
按热度按时间cclgggtu1#
我希望我能正确理解你:你在寻找反向查找,对吗?
从
Translation
到Event
很容易。另一种方法称为反向查找。一个
Translation
属于一个特定的Event
。但是一个特定的Event
可以有一组Translation
s。我不知道这对您的用例是否有意义,但这就是ForeignKey
的逻辑。另一种选择是OneToOneField
(more)。短语“has a set of”已经将您引导到反向查找的python语法。这样做:你会发现更多有关查找here。只要在网站上搜索“_set”,你就会更快地找到它。