Python 在django模型中使用最大函数时如何获取注释中的相关对象列表
我有两个模型,一个Python 在django模型中使用最大函数时如何获取注释中的相关对象列表,python,python-3.x,django,django-models,Python,Python 3.x,Django,Django Models,我有两个模型,一个用户模型和一个支付模型,它们之间有很多关系用户有多个付款s。我试图实现的是根据在字段创建的付款对用户模型进行排序 我试图修改查询集,然后使用带注释的字段latest\u tran进行排序 def get_queryset(self, request): qs = super(ClubbedPaymentAdmin, self).get_queryset(request) qs = qs.annotate( latest_tran=Greatest
用户
模型和一个支付
模型,它们之间有很多关系<代码>用户有多个付款
s。我试图实现的是根据在字段创建的付款
对用户
模型进行排序
我试图修改查询集,然后使用带注释的字段latest\u tran
进行排序
def get_queryset(self, request):
qs = super(ClubbedPaymentAdmin, self).get_queryset(request)
qs = qs.annotate(
latest_tran=Greatest(Payment.objects.filter(user=F('id')).values_list('created_at', flat=True)))
return qs
但我有以下错误
Greatest must take at least two expressions
因此,在评估Payment
s列表时,我似乎犯了一个错误。或者可能是我采取了错误的方法。
任何帮助都将不胜感激。
多谢各位
编辑
我正在使用默认的User
模型,用于django
我的付款
型号如下-
class Payment(models.Model):
amount = models.FloatField('Points', max_length=10)
purchase_token = models.TextField(max_length=250)
user = models.ForeignKey(User, on_delete=models.CASCADE)
note = models.TextField(max_length=1000, default=None, blank=True)
created_at = models.DateTimeField('Transaction Date')
updated_at = models.DateTimeField('Updated at', auto_now=True)
像这样的,用这个
从django.db.models导入最大值
def get_queryset(自我,请求):
qs=super(ClubbedPaymentAdmin,self)。获取查询集(请求)
qs=qs.annotate(最新交易=Max('payment\uu created\u at'))
返回qs
最大值
不取最大值,它取不同参数中的最大值,因此最大值('foo','bar')
将取foo
和bar
列中的最大值
你需要的是。您可以使用由下划线分隔的名称,因此:
from django.db.models import Max
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).annotate(
latest_tran=Max('payment__created_at')
)
从django.db.models导入最大值
def get_queryset(self、*args、**kwargs):
return super().get_queryset(*args,**kwargs)。注释(
最新交易=最大值('付款日期')
)
注意:通常最好使用来引用用户模型,而不是直接使用。有关更多信息,请参见
你能分享你的模型吗?谢谢你的回答。它解决了我的问题。也谢谢你的留言。
from django.db.models import Max
def get_queryset(self, *args, **kwargs):
return super().get_queryset(*args, **kwargs).annotate(
latest_tran=Max('payment__created_at')
)