python – Django .values_list()替代方法,为ForeignKey字段的模型返回QuerySet?

前端之家收集整理的这篇文章主要介绍了python – Django .values_list()替代方法,为ForeignKey字段的模型返回QuerySet?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我正在寻找一种基于模型ForeignKey字段将一种类型的QuerySet转换为另一种类型的简洁方法,所以基本上类似于.values_list(‘my_fk’,flat = True)但返回正确的QuerySet而不是values_list()变种.

例如:

class Parent(models.Model):
    child = models.ForeignKey(Child)
    ...

children_qs = Parent.objects.filter(...).theMagicMethod('child')  

这里,children_qs现在应该是先前查询中使用的所有Child实例的查询集,而不是返回Parent实例的查询集.

您可以使用自定义查询集和__in查找来执行此操作,但感觉有点臭:

class ParentQuerySet(models.QuerySet):
    ...
    def children(self):
        return Child.objects.filter(id__in=self.values_list('child_id',flat=True))

这将从Parent的查询集中的记录中获取所有child_id FK,并直接重新查询Child.当我检查sql它做了一个子查询,我不确定这是最优还是有一些奇怪的副作用.它看起来像原始父查询的排序已经消失,因此重复.

有人有更好的东西吗?

注意:我知道我可以通过Child直接查询并使用反向查找过滤Parent的字段,但这不支持您可以在主模型上执行的所有操作.

最佳答案
试试这个,它将返回Child类的query_set

parent_primary_keys = Parent.objects.filter(...).values_list('pk',flat=True)

 children_qs = Child.objects.filter(id__in=parent_primary_keys)
原文链接:https://www.f2er.com/python/438664.html

猜你在找的Python相关文章