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

查看:569
本文介绍了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天全站免登陆