如何为Model
中的排序添加字段长度?
我有一个IPv4Manage模型:
class IPv4Manage(models.Model):
"""
ipv4
"""
ip = models.GenericIPAddressField(help_text="ip")
...
class Meta:
ordering = ['ip']
在Meta中,我们可以使用字段设置排序条件。
但是我有一个问题,我可以为ip
中的订单设置Model
的长度吗?
我知道我是否可以在Prefetch
的长度内使用extra
或ip
并对其进行排序。
...extra(select={'length':'Length(ip)'}).order_by('length', 'ip')
但是我们可以在Model
中设置顺序参数的长度吗?
EDIT-1
我创建了一个经理:
class IPv4ManageManager(models.Manager):
def get_queryset(self):
return super().get_queryset().annotate(length=Length('ip')).order_by('length', 'ip')
我将其添加到默认管理器中,它对我有用。
class IPv4Manage(models.Model):
"""
ipv4
"""
ip = models.GenericIPAddressField(help_text="ip")
...
objects = IPv4ManageManager()
class Meta:
ordering = ['ip']
答案 0 :(得分:1)
在Django 2.0中,您可以将查询表达式与ordering
一起使用:
from django.db.models.functions import Length
class IPv4Manage(models.Model):
"""
ipv4
"""
ip = models.GenericIPAddressField(help_text="ip")
...
class Meta:
ordering = [Length('ip').asc()]