Django按模型中的方法查询排序

时间:2016-01-16 14:59:55

标签: django django-models django-queryset

我有这个型号:

class User(models.Model):
  uid = models.AutoField(primary_key=True)
  email = models.EmailField(max_length=200, unique=True)
  password = models.CharField(max_length=200)
  name = models.CharField(max_length=200, default='')
  contact = models.CharField(max_length=10)
  cash_amount = models.IntegerField(default=25000)
  share_amount = models.IntegerField(default=0)
  def __str__(self):
    return self.email
  def total_amount(self):
    return self.cash_amount + self.share_amount

如何编写QuerySet以在 total_amount()的基础上对结果进行排序,我在下面尝试查询:

User.objects.order_by('total_amount()')

但是FieldError:无效的order_by参数:[' total_amount()']来了。

是否有其他方法可以根据 cash_amount + share_amount 编写查询以排序结果,而无需创建 total_amount()

1 个答案:

答案 0 :(得分:1)

您可以尝试使用extra

User.objects.extra(
    select={'field_sum' : 'cash_amount + share_amount'},
    order_by=('field_sum',)
)