当前位置: 代码迷 >> python >> Django:获取数据库错误中最新插入的SPECIFIC字段值:需要多个值才能解压
  详细解决方案

Django:获取数据库错误中最新插入的SPECIFIC字段值:需要多个值才能解压

热度:97   发布时间:2023-06-13 14:14:55.0

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

我在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

您应该在latest()之后询问名称,即:

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

values('name')会丢弃除名称之外的所有内容,因此在该调用之后,您将不再找到最后一个ID。

尝试这个:

name = Record.objects.values_list('name', flat=True).last()

latest(field_name)使用提供的date_name作为日期字段按日期返回表中的最新对象。

latestorder_by方法需要在Queryset上运行。 values_list方法返回一个列表,所以这就是为什么会出现错误的原因。

此外,最新的返回一个对象,而不是一个Queryset这样的切换这两种方法的顺序是不够的,因为values_list也有一个运行Queryset

因此,要么只使用对象:

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

或更有效地:

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

只是一个注释。 以这种方式使用最新功能可能会产生误导。 使用最新的id作为参数将为您提供数据库中id最大的对象。 根据您的需求,最好添加一个带有auto_now_add / auto_now的DateTimeField并将其用作最新查询的基础。 这将使您更清楚地了解“最新”在您的特定情况下的含义。

如果发现QuerySet文档非常好: :

而且,如果您想下次进行测试以自己解决问题,我真的建议您运行python manage.py shell并导入模型以测试您的衬板。 您还应该研究一下测试,一旦情况变得更加复杂,它可以为您提供一个更好的故障排除界面: :