2017-02-20 74 views
0

我是django的新手,並且使用了很多教程和堆棧溢出來設計我的應用程序。爲什麼我的django模板將用戶設置爲與對象相同?

我的應用程序爲用戶跟蹤個案。我需要它能夠做的一件事就是以一個用戶的身份登錄,並查看另一個用戶的案例。

當這個頁面出現時,通常會說「註銷Joe Bloggs」的位,其中Joe Bloggs是登錄用戶,表示「註銷Fitzwilliam Darcy」,其中Fitzwilliam Darcy是用戶,我應該查看。

我真的不想繼續開發應用程序,直到我修復它,以防萬一這是一個潛在問題的症狀,將來會導致更多問題。

我會添加我認爲所有相關的部分都在這裏,但如果還有其他需要的東西,讓我知道,我會很樂意編輯。

#urls.py 

url(r'cases/(?P<slug>\w+)',views.UserCasesView.as_view(),name='cases'), 

#views.py 

@method_decorator(login_required,name='dispatch') 
class UserCasesView(generic.DetailView): 

    model = models.User 
    template_name = 'caseworkclub/caseworker_detail.html' 
    slug_field = 'username' 

#models.py 

class User(AbstractUser):           

    association = models.ForeignKey('Association',null=True) 

    def full_name(self): 
     return("{} {}".format(self.first_name,self.last_name) 

    def open_cases(self): 
     return(Case.objects.filter(closed__isnull=True,caseworker=self)) 

嵌塞位是爲了使用戶名可以根據this answer to another question

這也可能是值得向大家解釋,如果models.py位不送人是網址,我已經延長基礎用戶類和我正在使用它,而不是用戶配置文件技術。但是,自從改變了上面的slu bit之後,問題似乎就出現了。

任何幫助非常感謝,正如我所說 - 任何更多的信息,很樂意提供!

詹姆斯

+0

如果您在註銷部分改變'user'到'request.user'發生什麼呢? – Lucas

+0

你能展示你的模板嗎? – GwynBleidD

回答

1

這是因爲你沒有一個合理的默認覆蓋你UserCasesView類的get_context_data()方法。它目前使用的模型名稱(也恰好是user)與內置的user變量衝突,該變量由django.contrib.auth.context_processors.auth上下文處理器設置。

the documentation

上下文變量覆蓋從模板context處理器

任何變量從get_context_data()優先於上下文變量從上下文處理器值。例如,如果您的視圖將模型屬性設置爲User,則用戶的默認上下文對象名稱將覆蓋來自django.contrib.auth.context_processors.auth()上下文處理器的用戶變量。使用get_context_object_name()來避免衝突。

嘗試從user改變對象的名稱別的東西(如case_user):

class UserCasesView(generic.DetailView): 
    ... 
    context_object_name = 'case_user' 
+0

這解決了它,謝謝!我很驚訝,我只需要改變這一行,而不是添加對我添加的任何地方的引用? –

相關問題