下面給出的模型類:爲什麼值列表在Django中保留過濾器?
from django.db import models
class User(models.Model):
friends = models.ManyToManyField('self', symmetrical=False, blank=True)
如果我有N個用戶,其中至少有一個有兩個朋友一個QuerySet,並通過一個朋友的ID過濾該查詢集檢索用戶和執行.values_list()通話對查詢集,這樣的:
all_users = User.objects.all()
single_user = User.objects.filter(friends=2)
single_user.values_list('friends', flat=True)
結果輸出像這樣:
>>> [2]
但如果我執行相同.values_li ST調用該對象的朋友域本身,就像這樣:
single_user.first().friends.values_list('id', flat=True)
結果的輸出:
>>> [2, 3]
如果這些呼叫被同一對象上進行,原因是輸出有什麼不同?
以供參考,這是使用Django 1.10和Python 3.5.2
編輯實現:我想澄清一些混亂。我的問題不是我誤解了查詢本身的結果。在這兩種情況下,我都會得到正確的用戶對象。不同的是,在一種情況下,我得到了一個計數爲1的QuerySet,在另一箇中我得到了User對象的實例。
所以用不同的方式陳述我的問題:我困惑的是如何調用values_list對象的不同表示中的相同的對象導致不同的輸出?
例子,我有查詢集
<QuerySet [<User: John Doe, ID: 1]>
而下面的對象之後,各自在自己的變量
<User: John Doe, ID: 1>
如果我在同場進行values_list,在必要的方式,我得到兩個不同的結果。我想解釋一下爲什麼。對我而言,我感覺結果應該是一樣的。由於他們不是,我誤解了這些事情是如何運作的,我正在尋求澄清。
用戶。修正了錯別字 – Neelik
這是一個解釋一個觀點的例子。這個問題不是關於應該命名什麼模型,而是關於查詢集。感謝您的輸入。 – Neelik
我選擇了單數來希望說明它是一個迭代。在我們的實際代碼中,我們遵循您詳細介紹的指導原則。主要是編輯這個問題,希望能夠提高可讀性。 – Neelik