我正在寻找一种基于模型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_setparent_primary_keys = Parent.objects.filter(...).values_List('pk',flat=True) children_qs = Child.objects.filter(ID__in=parent_primary_keys)
总结 以上是内存溢出为你收集整理的python – Django .values_list()替代方法,为ForeignKey字段的模型返回QuerySet?全部内容,希望文章能够帮你解决python – Django .values_list()替代方法,为ForeignKey字段的模型返回QuerySet?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)