2014-10-08 58 views
0

很難描述我想要做什麼,但我會嘗試。在我過濾了這樣的模型後(我最多隻能獲得1個對象):如何在過濾模型對象後獲取精確模型字段?

tweets = Tweet.objects.filter(user__iexact=username) # username variable I got from URL 

我想顯示哪個用戶寫了推文。所以我試圖在我的模板中這樣做:

<h1>{{tweets.username}}</h1> 

但是,它沒有顯示任何東西。順便說一句,這是我的模型:

class Tweet(models.Model): 
    text = models.CharField(max_length=140) 
    date = models.DateField(default=date.today) 
    username = models.CharField(max_length=140) 
+0

'username'是鳴叫實例的屬性。它在推文的查詢集上不可用;它會顯示哪一個?第一個?第五個?爲什麼不從視圖傳入'username'? – Brandon 2014-10-08 19:01:26

+0

在您的查詢中,您爲屬性'user'篩選具有特定值的Tweet對象。但是Tweet類沒有屬性'user'。它應該可能是'username__iexact = username'? – cezar 2014-10-08 19:03:18

+0

如果他只想得到一個條目(如果只返回一個條目),那麼最好使用'get'。否則,如果有很多可能性,您還可以遍歷推文:'{tweet in tweets%} {{tweet.username}} {%endfor%}''。 – cezar 2014-10-08 19:07:20

回答

1

如果您要查詢一個唯一的入口,使用。獲得

tweets = Tweet.objects.get(username__iexact=username) 

,而不是.filter
filter()方法將返回一個數組,即使它只有一個結果。

而且也,你的查詢是錯誤的...你有你的模式,而不是用戶有

(username__iexact=username) 

https://docs.djangoproject.com/en/dev/topics/db/queries/

上述不具有任何領域用戶
0

您需要篩選你的鳴叫這樣:

tweets = Tweet.objects.filter(username__iexact=username) 

如果你只想要一個分享Tweet回:

tweet = Tweet.objects.get(username__iexact=username) 

哪個鳴叫實例返回將取決於模型的默認排序,即id,除非您在模型的Meta選項中指定它。

在模板中,您需要可以遍歷所有的鳴叫返回顯示tweet.username只存在於一個實例,或者你需要的用戶名,只是顯示經過:

<h1>{{ username }}</h1> 
0

鳴叫模式所以過濾器user__iexact將不起作用。

假設用戶名不是獨特的,因爲該模型沒有描述用戶名字段是唯一

這可以改變爲: 鳴叫= Tweet.objects.filter(username__iexact =用戶名)

濾波器查詢總是返回一個對象列表。 訪問第一對象使用鳴叫[0]

顯示,我們可以使用鳴叫的用戶名[0] .username