Django:元类顺序忽略 NULL

问题描述 投票:0回答:1

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

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

某些记录的“order”值为 null。 如果我得到查询集,则订单值为 null 的记录将放置在结果的开头。 我只想将这样的记录放在查询集的末尾。

我为此目的检查了一些文章。 django 按 isnull 值排序? Django:按位置排序忽略 NULL

但我需要使用 Django 模型的 Meta 类来完成。 有什么想法可以通过元类来做到这一点吗?

问候 菲利普

python django model metaclass
1个回答
0
投票

我知道这个问题太老了,但是根据 django 的文档(https://docs.djangoproject.com/en/4.2/ref/models/options/),可以使用查询表达式来处理排序,将空值保留为查询集末尾。

我已经成功完成了这些排序设置:

类 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)

类元:

排序 = [F("fieldA").asc(nulls_last=True), F("fieldB").asc(nulls_last=True)]

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.