繁体   English   中英

Django Queryset - 获取相关对象

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM