Sql 在django中,如何获取由子对象中的某个字段排序的父对象的所有不同对象?
我有两个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
可用
,该属性可以是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进行查询呢?来自
SQLSELECT
柱。在中使用时,这有时会导致意外的结果
与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个对象。