簡體   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