python - 如何为模型中的排序添加字段长度?

标签 python django

如何在 Model 中添加用于排序的字段长度?

我有一个 IPv4Manage 模型:

class IPv4Manage(models.Model):
    """
    ipv4
    """
    ip = models.GenericIPAddressField(help_text="ip")
    ...
    class Meta:
        ordering = ['ip']

在元中,我们可以使用字段设置排序标准。

但是我有一个问题,我可以在Model中设置ip的订单长度吗?

我知道在 APIView 中我是否可以使用 Prefetchextra 来获取 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/

相关文章:

python - 在 Django 模板中渲染空白 ImageFields

django queryset 从 postgresql View 返回错误值

python - 使用 matplotlib 在绘图脚本中设置 Latex 希腊字母

django-lfs "No module named appconf"

ruby-on-rails - 在 Pylons 和 TG2 中,Rails 的 Migrations 或 Django 的 South 相当于什么?

python - 使用Python获取字符的unicode代码点

javascript - django javascript 行为异常

python - 在训练-测试分割后使用 LabelEncoder 对分类变量中看不见的/新标签进行编码?

python - Django Formset - 检查行标记是否已删除

python - 使用 Pandas 创建发薪日的 DateOffset