如何在 Model
中添加用于排序的字段长度?
我有一个 IPv4Manage 模型:
class IPv4Manage(models.Model):
"""
ipv4
"""
ip = models.GenericIPAddressField(help_text="ip")
...
class Meta:
ordering = ['ip']
在元中,我们可以使用字段设置排序标准。
但是我有一个问题,我可以在Model
中设置ip
的订单长度吗?
我知道在 APIView 中我是否可以使用 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']
最佳答案
在 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()]
关于python - 如何为模型中的排序添加字段长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50982348/