2017-06-29 37 views
0

我已經創建了我的User模型和我的Projects模型之間的多對多關係,並且我想列出特定用戶所屬的所有項目用戶的個人資料頁面。Django:遍歷一個反轉的多對多關係

模式是:

反向M2M查詢的支持(即,沒有一個ManyToManyField開始在飯桌上):

class User(auth.models.User,auth.models.PermissionsMixin): 
    def __str__(self): 
     return "@{}".format(self.username) 

class Prosjekter(models.Model): 
    id = models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID') 
    ... 
    users = models.ManyToManyField(settings.AUTH_USER_MODEL, blank=True, verbose_name="Project participants") 
    ... 

Django documentation狀態

>>> Publication.objects.filter(article__id=1)

<QuerySet [<Publication: The Python Journal>]>

我可以通過鍵入打印特定用戶的查詢集(這裏用其主鍵是用戶2所示):

class UserDetailView(generic.DetailView): 
    model = User 
    template_name = 'accounts/user_detail.html' 
    results = Prosjekter.objects.filter(users__pk=2), 
    print(results) 

這將返回:

(<QuerySet [<Prosjekter: Project 1>, <Prosjekter: Project two>, <Prosjekter: Project third>]>,) 

但是,正如您所看到的,我只呼叫主鍵爲的用戶。相反,我想創建一個可以在一般意義上使用的視圖。具體而言,我可以看到:

我是新來的Python和Django和有麻煩創造這個觀點。在其他許多嘗試中,我試圖遵循this建議,但沒有成功。因此,你能否幫我解決以下問題?

  1. 可以更新我的UserDetailView代碼,以便它適用於所有用戶?
  2. 你能告訴我,我必須在/user_detail.html頁面上執行(如果我理解正確的話,它應該是一個for循環的代碼,通過在Prosjekter模型,並列出了所有的項目迭代只有特定用戶是其中的一部分)。

回答

0

您使用DetailView錯誤:

class UserDetailView(generic.DetailView): 
    model = User 
    template_name = 'accounts/user_detail.html' 

    def get_context_data(self, **kwargs): 
     ctx = super(UserDetailView, self).get_context_data(**kwargs) 
     ctx['results'] = Prosjekter.objects.filter(users=self.get_object()) 
     return ctx 

如果你想要更多的環境變量,添加它們是這樣的:

def get_context_data(self, **kwargs): 
    ctx = super(UserDetailView, self).get_context_data(**kwargs) 
    ctx.update({ 
     'results': Prosjekter.objects.filter(users=self.get_object()), 
     'foo': 'bar', 
     'spam': 'ham', 
    }) 
    return ctx 
+0

bakatrouble:謝謝你的快速回復。我可以問你在我的user_detail.html文件中發佈我需要的模板標籤代碼嗎?編輯:沒關係,我得到它的工作:{%爲結果%{}中的prosjekter {{prosjekter.id}} {%endfor%}。謝謝你幫助我 - 我已經坐了幾個小時! – Christian

+0

'{%爲結果結果%} {{result.pk}} {%endfor%}' – bakatrouble

+0

bakatrouble:你能幫我解決一件事嗎?在這篇文章中我沒有提到它,但我實際上在User模型和Projects模型之間有三個多對多的關係:1)Prosjekter中的一個m2m字段名爲** responsiblefordata **,2)Prosjekter中的另一個字段被命名爲**用戶**(您已經幫助過我),以及3)prosjekter中的第三個字段名爲** contactperson **。我試圖使用多個** def get_context_data **,我嘗試將它們合併爲一個def,兩次都使用其他名稱替換_ctx_和_results_。它只會顯示其中一個。 – Christian