Django Order_BY自定义函数 [英] Django Order_BY custom function
本文介绍了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屋!
查看全文