我试图从查询集中检索不同的.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'
AFAIK
__str__
与.values()
没有任何关系-这里的问题是,您需要在获取特定项之前指定值,而不是相反:这里的问题是您的
.last()
将检索最后一个Settings
对象。因此,您将对Settings
对象调用.values('bb_bonus')
。由于模型没有.values(..)
方法,因此它不会返回任何内容。在但是,您可以使用以下方法从查询集检索特定列的值:
因此我们这里使用^{} [Django-doc],它接受列的名称作为参数。然后它通常会返回一个
QuerySet
的列表,其中包含这些值。但是,如果指定一个列;那么,如文档所述:所以这意味着我们创建一个单数值的
QuerySet
,然后我们将检索该查询集的最后一个条目。注意,我们从查询集中提取所有元素,.last()
是在我们对数据库执行的查询中“注入”的,因此结果是最后一条记录的该列的标量值。在因此,
.values_list(..)
需要在.last()
之前执行,因为否则您正在与Settings
对象对话,而不是与QuerySet
进行对话。在相关问题 更多 >
编程相关推荐