Django Order_BY 自定义函数 [英] Django Order_BY custom function

查看:26
本文介绍了Django Order_BY 自定义函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在模型 roll_numb 中有字段.roll_numb 的值如下.

I have field in model roll_numb. Theroll_numb has values as follows.

070-001
070-007
070-343
080-002
080-008

当我 order_by roll_numb 时,排序和上面一样.我想按 - 拆分 roll_numb 并按余数排序.(即 001、002、008)

When i order_by roll_numb the sorting is as it is above. I want to split the roll_numb by - and sort by the remainder. (i.e. 001, 002, 008)

class Meta:
        ordering = ['roll_numb']

推荐答案

我认为不可能在 Django 的 ORM 范围内通过 model 的方法来订购 queryset.

I think it is not possible to order a queryset by method of model in Django's ORM scope.

因此,为了通过您的自定义方法对您的 queryset 进行排序,我推荐两种方法:

So in order to sort your queryset by your custom method, I recommend 2 ways:

第一

qs = mymodel.objects.all()
qs = sorted(qs, key: lambda i: i.roll_numb().split('-')[1])

第二

向您的模型添加另一个字段,以便启用 Django 的 ORM 以按所需值排序:

Add another field to your model, so enable Django's ORM to sort by the desired value:

MyModel(models.Model):
    class Meta:
        ordering = ['roll_numb_splitted']

   roll_numb_splitted = models.Charfield(max_length=3)

   def save(self, *args, **kwargs):
        # this is a check to run once
        if not self.pk:
            self.roll_numb_splitted = self.roll_numb().split('-')[1]
        return super(MyModel, self).save(*args, **kwargs)

这篇关于Django Order_BY 自定义函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆