如何从Django中的queryset检索值?

2024-06-25 07:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从查询集中检索不同的.values(),但在返回正确值时遇到问题。如何编写我的model以便可以使用.values()方法检索属性?在

我试图更改模型的__str__方法以返回字典,但这不起作用,或者我做错了。在

class Settings(models.Model):
    bb_bonus_qualify = models.CharField(max_length=16, default=38.00)
    service_breakpoint = models.CharField(max_length=16, default=1700.00)

    def __str__(self):
        return '%s: %s, %s: %s' % (
            'bb_bonus', self.bb_bonus_qualify, 'service_breakpoint', self.service_breakpoint)

我想说Settings.objects.last().values('bb_bonus'),返回的值是self.bb_bonus_qualify。常见的错误是:AttributeError: 'Settings' object has no attribute 'values'


Tags: 方法selfdefaultsettingsmodelsservicelengthmax
2条回答

AFAIK__str__.values()没有任何关系-这里的问题是,您需要在获取特定项之前指定值,而不是相反:

Settings.objects.values('bb_bonus').last()

这里的问题是您的.last()将检索最后一个Settings对象。因此,您将对Settings对象调用.values('bb_bonus')。由于模型没有.values(..)方法,因此它不会返回任何内容。在

但是,您可以使用以下方法从查询集检索特定列的值:

Settings.objects.values_list('bb_bonus_qualify', flat=True).last()

因此我们这里使用^{} [Django-doc],它接受列的名称作为参数。然后它通常会返回一个QuerySet的列表,其中包含这些值。但是,如果指定一个列;那么,如文档所述:

If you only pass in a single field, you can also pass in the flat parameter. If True, this will mean the returned results are single values, rather than one-tuples.

所以这意味着我们创建一个单数值的QuerySet,然后我们将检索该查询集的最后一个条目。注意,我们从查询集中提取所有元素,.last()是在我们对数据库执行的查询中“注入”的,因此结果是最后一条记录的该列的标量值。在

因此,.values_list(..)需要在.last()之前执行,因为否则您正在与Settings对象对话,而不是与QuerySet进行对话。在

相关问题 更多 >