[英]Django Queryset - get related objects
我想在查询集中获取每个 object 的相关对象。
例子:
from django.contrib.contenttypes.fields import GenericRelation
from django.db import models
class Synonym:
value = models.CharField(max_length=100)
class Name:
synonyms = GenericRelation(Synonym)
names = Name.objects.all()
synonyms = names.values_list('synonyms', flat=True) # <- returns the database id but not the object
但是 value_list 方法只返回查询集中对象的 id。
我可以像这样将 output 展平:
[synonym for name in list(names) for synonym in name.synonyms.all()]
但我想知道是否有办法直接获取对象?
您已经在此处列出的内容是正确的
qs = Name.objects.all()
[synonym for synonyms in list(qs) for synonym in synonyms]
但可以(也许)用(需要测试)进行优化:
qs = Name.objects.all()
synonyms = []
for obj in qs:
synonyms.extend(obj.synonyms.all())
您可以为related_query_name=…
参数[Django-doc]指定一个值:
from django.contrib.contenttypes.fields import GenericRelation
class Name(models.Model):
synonyms = GenericRelation(Synonym, related_query_name='name')
然后,您可以反向获取项目,例如:
Synonym.objects.filter(name__isnull=False).distinct()
将获取所有具有相关Name
object 的Synonym
,例如:
Synonym.objects.filter(name__value__startswith='a').distinct()
将检索与Name
object 相关的所有Synonym
,其中value
以'a'
开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.