Django:Meta类顺序忽略NULL

0ejtzxu1  于 2023-08-08  发布在  Go
关注(0)|答案(1)|浏览(83)

我需要使用Django模型的Meta类对查询集进行排序。我是这样定义的:

class MyModel(models.Model):
    order = models.IntegerField(blank=True, null=True)
    class Meta:
        ordering = ['order']

字符串
某些记录的“订单”值为null。如果我得到queryset,那么订单值为null的记录将被放置在结果的开头。我只是想把这样的记录放在queryset的末尾。
我为此查阅了一些文章。django order by isnull value?Django : Order by position ignoring NULL的数据库
但是我需要使用Django模型的Meta类来完成。有没有什么方法可以通过Meta class来实现?
关于Philip

gojuced7

gojuced71#

我知道这个问题太老了,但根据django的文档(https://docs.djangoproject.com/en/4.2/ref/models/options/),可以使用查询表达式来处理排序,将空值保留在queryset的末尾。
我已经成功地完成了这些排序设置:

class MyModel(models.Model):

fieldA = models.ForeignKey(ModelA, default=None, null=True, blank=True, on_delete=models.CASCADE)
fieldB = models.ForeignKey(ModelB, default=None, null=True, blank=True, on_delete=models.CASCADE)
fieldA_or_B = models.IntegerField(choices=[...], default=None, null=False, blank=False)

字符串

class Meta:

ordering = [F("fieldA").asc(nulls_last=True), F("fieldB").asc(nulls_last=True) ]
希望能帮上忙!

相关问题