Sql 在django中,如何获取由子对象中的某个字段排序的父对象的所有不同对象?

Sql 在django中,如何获取由子对象中的某个字段排序的父对象的所有不同对象?,sql,django,python-3.x,django-models,Sql,Django,Python 3.x,Django Models,我有两个Django模型,分别命名为类别和项目。一个类别可以有许多项模型项有一个属性可用,该属性可以是True或False class Categories(models.Model): name = models.TexField() **some other fields** class Item(models.Model): project = models.ForeignKey(Categories,on_delete=models.CASCADE, relat

我有两个Django模型,分别命名为类别项目。一个类别可以有许多项模型项有一个属性
可用
,该属性可以是
True
False

class Categories(models.Model):
    name = models.TexField()
    **some other fields**

class Item(models.Model):
    project = models.ForeignKey(Categories,on_delete=models.CASCADE, related_name='category_item')
    name = models.TextField()
    is_available = models.BooleanField()
这就是我查询数据库的方式:

all_cat = Categories.odjects.filter(**some_field**).order_by('-category_item__is_live').distinct()
然而,我仍然没有得到distint结果,我相信这里distinct适用于项目,但不适用于类别

我知道确切的sql查询,我可以用它进行查询,但是如何使用django进行查询呢?

来自

SQL
SELECT
柱。在中使用时,这有时会导致意外的结果 与
distinct()
结合使用。如果您按字段从相关 模型中,这些字段将添加到选定的列中,并且它们可能 使其他重复行看起来不同。因为额外的 返回的结果中不显示列(它们仅用于 支持排序),有时看起来不明显的结果是 被归还

类似地,如果使用
values()
查询来限制列 选中后,在任何
order\u by()
(或默认型号)中使用的列 订购)仍将涉及,并可能影响产品的唯一性 结果

这里的寓意是,如果您使用的是
distinct()
请小心 按相关型号订购。类似地,当使用
distinct()
values()
一起,按字段排序时要小心
values()
调用


因此,请尝试将
'-类别项目\uu是“活动的”
添加到
distinct()
中,如下所示:

all_cat = Categories.odjects.filter(**some_field **).order_by(
    '-category_item__is_live').distinct('-category_item__is_live')
all_cat=Categories.odjects.filter(**some_field**)。排序依据(

“-category\u item\uuu is\u live”).distinct(“-category\u item\uu is\u live”)
您是否可以发布满足您需要的SQL查询(仅当您在数据库上实际测试过它时)?您想将您的
类别
与至少有一个
项目的类别
一起排序吗?您使用的是哪种数据库后端?
distinct('field')
仅在PostgreSQL上可用
.order_by('related_booleanfield')。distinct('related_booleanfield')
留给您最多3个对象(相关字段的每个可能值一个,
True
False
null
)。如果在
order\u by
中没有更多字段,您就无法决定返回哪3个对象。