【发布时间】:2021-02-16 16:31:37
【问题描述】:
是否可以在没有相关名称 (related_name="+") 的情况下预取目标实例上的对象?当然我知道相关名称没有问题,但我不确定没有它是否可能。
示例代码如下:
from django.db import models
class Parent(models.Model):
name = models.CharField(max_length=50)
class Child(models.Model):
parent = models.ForeignKey(to=Parent, related_name="+", on_delete=models.CASCADE)
name = models.CharField(max_length=50)
Parent.objects.all().prefetch_related('child_set')
也许可以使用Prefetch(lookup, queryset=None, to_attr=None) 对象,因为它采用参数列表中的查询集?
【问题讨论】:
-
您在这里遇到了什么样的问题?您是否尝试过并遇到错误,或者您在问“如果”类似的问题?
-
@Charnel 问题是,在查询集查找中使用了相关名称,所以当未设置相关名称时,它不能在查询集查找中使用,如
Parent.objects.filter(child__[insert attribute]=...)。同样的行为也适用于预取。 -
如果您没有指定相关名称,您仍然可以使用
_set后缀,如fieldname_set。 -
我有
related_name="+"在问题名称和示例代码中。 -
如果你想访问反向关系,
related_name="+"有什么意义?
标签: django django-models django-orm