2011-04-24 555 views
4

對於noobish問題的道歉,我對Python和Django都很陌生,並試圖製作我的第一個應用程序。Django:訪問模型屬性

我有一個簡單的類

class About(models.Model): 
    title = models.CharField(max_length=200) 
    description = models.TextField() 
    date = models.DateTimeField('date added') 

,而我已經添加了一條記錄。我可以

about = About.objects.filter(id=1) 

然而,進入這一點,如果我嘗試使用點語法來訪問它的屬性,我得到以下錯誤

>>> about.title 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
AttributeError: 'QuerySet' object has no attribute 'title' 

我知道如何使用unicode在模型中指定一個更好返回值如

def __unicode__(self): 
    return self.title 

我應該使用它來將模型數據格式化爲字典/列表嗎?或者我完全缺少一些默認行爲?

回答

1

由於the documentation解釋,filter總是返回一個QuerySet,這是項目的列表類似的集合,即使只有一個元素過濾條件相匹配。所以,你可以切片列表來訪問你的元素 - about[0] - 或者更好,使用get()代替:

about = About.objects.get(id=1) 
print about.title 
1

如果你想要得到的只是一排

about = About.objects.get(pk=1) 

現在about是一個對象(一行)

filter返回列表,因此要訪問列表中的項目,您必須使用index(約[0])或for loop。但get只返回一行。