gpt4 book ai didi

python - Django:在数据库错误中获取最近插入的特定字段值:需要超过 1 个值才能解包

转载 作者:太空宇宙 更新时间:2023-11-03 11:55:24 24 4
gpt4 key购买 nike

我有一个包含多个字段的数据库,但我只想获取最近插入数据库的一个字段(“名称”)的值。

我在views.py中尝试了一些代码,但它们都返回错误:

name=Record.objects.values_list('name', flat=True).latest('id')
name=Record.objects.values_list('name', flat=True).latest('name')
name=Record.objects.values_list('name', flat=True).order_by('-id')[:1]
name=Record.objects.values('name').latest('id')

错误:需要超过 1 个值才能解包

我该如何解决这个问题?谢谢。

供您引用的 views.py 代码。

class XXXView(ListView):
context_object_name = XXX'
template_name = 'XXX.html'

queryset = xxx.objects.all()
name=entry.objects.latest('id').name

if name is not None:
queryset=queryset.filter(name=name)

sales=xxx.objects.filter(queryset).aggregate(Sum('sales'))

def get_context_data(self, **kwargs):
context = super(XXXView, self).get_context_data(**kwargs)
context['bbb'] = entry.objects.order_by('-id')[:1]
return context

最佳答案

latestorder_by方法需要在 Queryset 上运行. values_list 方法返回一个列表,这就是您收到错误的原因。

此外,latest 返回一个对象,而不是 Queryset因此自 values_list 起切换这两种方法的顺序是不够的还必须在 Queryset 上运行

所以,要么只使用对象:

name=Record.objects.latest('id').name

或更高效:

name=Record.objects.only('name').latest('id').name

作为注释。以这种方式使用最新功能可能会产生误导。使用最新的 id作为参数会给你最大的对象 id在数据库中。根据您的需要,添加 DateTimeField 可能会更好。使用 auto_now_add/auto_now 代替并将其用作最新查询的基础。这将使“最新”在您的特定情况下的含义更加清楚。

如果发现 QuerySet 文档非常好:https://docs.djangoproject.com/en/1.8/ref/models/querysets/

如果您想下次自己测试一下以找出问题所在,我真的建议您运行 python manage.py shell并导入您的模型以测试您的单衬垫。您很可能还应该查看测试,一旦事情变得更加复杂,它可以为您提供更好的故障排除界面:https://docs.djangoproject.com/en/1.8/topics/testing/overview/

关于python - Django:在数据库错误中获取最近插入的特定字段值:需要超过 1 个值才能解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209202/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com