[英]How to retrieve value from queryset in django?
我正在尝试从查询集中检索不同的.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'
这里的问题是您的.last()
将检索最后一个Settings
对象。 因此,您将在Settings
对象上调用.values('bb_bonus')
。 由于模型没有.values(..)
方法,因此它不会返回任何内容。
但是,您可以从查询集中检索某个列的值,使用:
Settings.objects.values_list('bb_bonus_qualify', flat=True).last()
因此,我们在这里使用.values_list(..)
[Django-doc] ,它接受列的名称作为参数。 然后它通常会返回一个包含这些值的列表的QuerySet
。 但是如果你指定一列; 然后,正如文档所说:
如果只传入单个字段,也可以传入
flat
参数。 如果为True
,这将意味着返回的结果是单个值,而不是一元组。
所以这意味着我们创建了一个奇异值的QuerySet
,然后我们将检索该查询集的最后一个条目。 请注意,我们没有从查询.last()
获取所有元素, .last()
被“注入”到我们对数据库执行的查询中,因此结果是最后一条记录的该列的标量值。
因此.values_list(..)
需要在.last()
之前执行,否则您将与Settings
对象对话,而不是与QuerySet
对话。
AFAIK __str__
与.values()
无关 - 这里的问题是您需要在获取特定项目之前指定值,而不是相反:
Settings.objects.values('bb_bonus').last()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.