簡體   English   中英

如何從 Django 中的查詢集中檢索值?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM