我需要使用 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 类来完成。 有什么想法可以通过元类来做到这一点吗?
问候 菲利普
我知道这个问题太老了,但是根据 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)]
希望有帮助!