我有一个Django模型,如下所示:我知道我们可以在Meta类中设置默认排序。
class Ingredient(models.Model):
name = models.CharField(max_length=200,unique=True,null=False)
slug = models.SlugField(unique=True)
class Meta:
ordering = ["name"]
由于订购在此处设置为名称。我发现的是,它是通过区分大小写的。那么如何使它不区分大小写呢
答案 0 :(得分:5)
在模型元选项(source)中无法将默认顺序设置为不区分大小写。
您可以使用模型QuerySet
的{{3}}方法:
from django.db.models.functions import Lower
Ingredient.objects.order_by(Lower('name'))
中所述
为了能够将其作为默认排序(并避免在每个查询集上重复order_by
方法),您可能希望为{{1}创建this answer类} model:
Ingredient
所以你可以订购所有# managers.py
from django.db.models.functions import Lower
class OrderedIngredientManager(models.Manager):
def get_queryset(self):
return super().get_queryset().order_by(Lower('name'))
# models.py
from .managers import OrderedIngredientManager
class Ingredient(models.Model):
name = models.CharField(max_length=200,unique=True,null=False)
slug = models.SlugField(unique=True)
ordered_objects = OrderedIngredientManager()
:
QuerySet
答案 1 :(得分:1)
您可以通过使用Django模型中的F来使用它
from django.db.models import F
class Ingredient(models.Model):
class Meta:
ordering = [F('name').asc(nulls_last=True)]
答案 2 :(得分:0)
我使用django 2.0.7进行了测试,并使用Upper Works:
class Ingredient(models.Model):
class Meta:
ordering = [Upper('name'), ]
name = models.CharField(max_length=200,unique=True,null=False)