[英]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.