San*_*idi 0 django django-models
我有一个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"]
Run Code Online (Sandbox Code Playgroud)
由于订购设置在这里命名.我发现的是,它是通过区分大小写的.那么如何使它不区分大小写
我使用 django 2.0.7 进行测试并使用 Upper 作品:
class Ingredient(models.Model):
class Meta:
ordering = [Upper('name'), ]
name = models.CharField(max_length=200,unique=True,null=False)
Run Code Online (Sandbox Code Playgroud)
在模型元选项(源)中,无法将默认顺序设置为不区分大小写.
你可以做的是使用你的模型的order_by方法QuerySet:
from django.db.models.functions import Lower
Ingredient.objects.order_by(Lower('name'))
Run Code Online (Sandbox Code Playgroud)
正如本答案所述
为了能够将其作为默认排序(并避免order_by在每个查询集上重复该方法),您可能希望为模型创建自定义Manager类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()
Run Code Online (Sandbox Code Playgroud)
所以你可以QuerySet订购所有订单:
Ingredient.ordered_objects.all()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |