Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在django模型中使用最大函数时如何获取注释中的相关对象列表_Python_Python 3.x_Django_Django Models - Fatal编程技术网

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')
    )