Django Order By 查询模型中的方法
Django Order By Query on Methods in Models
我有这个型号:
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
如何根据 total_amount() 编写 QuerySet 对结果进行排序,我尝试了以下查询:
User.objects.order_by('total_amount()')
但是 FieldError: Invalid order_by arguments: ['total_amount()'] comes.
是否有任何其他方法可以编写查询以根据 cash_amount + share_amount 对结果进行排序而不创建 total_amount().
您可以尝试使用 extra
User.objects.extra(
select={'field_sum' : 'cash_amount + share_amount'},
order_by=('field_sum',)
)
我有这个型号:
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
如何根据 total_amount() 编写 QuerySet 对结果进行排序,我尝试了以下查询:
User.objects.order_by('total_amount()')
但是 FieldError: Invalid order_by arguments: ['total_amount()'] comes.
是否有任何其他方法可以编写查询以根据 cash_amount + share_amount 对结果进行排序而不创建 total_amount().
您可以尝试使用 extra
User.objects.extra(
select={'field_sum' : 'cash_amount + share_amount'},
order_by=('field_sum',)
)