2012-11-12 29 views
0

當我使用select_related時,出現非常奇怪的錯誤。我創建了一個擴展auth_user表的模型。供您參考,我在下面粘貼使用select_related時'用戶'對象沒有屬性'分割'

class BasicDetails(models.Model): 
    username = models.OneToOneField(User) 
    name = models.CharField(max_length = 100, verbose_name = "Name") 
    sex = models.CharField(max_length = 10, verbose_name = "Sex", choices = GENDER_CHOICES) 
    dob = models.DateField(verbose_name = "Date of Birth") 
    mothertongue = models.CharField(max_length = 20, verbose_name = "Mother Tongue", choices = LANGUAGES_CHOICES) 

模型上表只有一個記錄,當我在Django的運行下面的查詢其外殼做工精細,我能夠檢索值。

basicdetails = BasicDetails.objects.select_related('auth_user__username',request.user) 

但是,當我在我的意見和模板中輸入相同的查詢時,我得到以下錯誤。

Traceback: 
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 
111.response = callback(request, *callback_args, **callback_kwargs) 
File "/home/vikramt/python/OpenMatrimony/wedding/views.py" in myprofile 
160.basicdetails = BasicDetails.objects.select_related('auth_user__username',request.user) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/manager.py" in select_related 
173.return self.get_query_set().select_related(*args, **kwargs) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py" in select_related 
686.obj.query.add_select_related(fields) 
File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/query.py" in  add_select_related 
1759.for part in field.split(LOOKUP_SEP): 
File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py" in inner 
185.return func(self._wrapped, *args) 

異常類型:AttributeError的在/我的資料/ 異常值:「用戶」對象有沒有屬性「分裂」

有人可以幫助我在這方面。我無法理解問題所在。任何線索?

-Vikram

+0

某處傳遞一個User對象,無論這是什麼(某些ORM模型?)某些函數或方法,在某個地方,預期一個字符串。 – Iguananaut

+0

用戶對象不過是django內置的認證系統。但是,當我運行相同的查詢,我得到的結果正確 – vkrams

回答

3

select_related預計其參數是字符串。您的request.user對象不是字符串,並且沒有split()方法。這就是爲什麼會引發一個AttributeError。

但棘手的部分是,正如你所說,當你在shell會話中做了同樣的事情時,它的工作。我冒險說,在那個shell的情況下,request.user是某種方式的字符串,或者像一個字符串一樣。

無論如何,你爲什麼要傳遞一個用戶實例select_related?我的意思是,你想通過這樣做來達到什麼目的?

編輯

好吧,如果你想獲取BasicDetails當前的登錄 用戶的記錄,你應該使用filter方法。它被用來 過濾器的查詢集:

basicdetails = BasicDetails.objects.filter(username=request.user) 

select_related方法被用來告訴ORM做一些事情 像SQL JOIN填充結果的指定相關的列。

而且我會建議你把你的username列重新命名爲 更清楚些。這是與用戶表的關係,所以您應該將其稱爲 只需user

+0

現在我已經添加str(request.user),我能夠擺脫錯誤,但沒有值顯示。我正在嘗試爲當前logged_in用戶檢索BasicDetails表的記錄。 – vkrams

+0

感謝您的回覆。爲了更改'username'列,我應該編輯不推薦的auth模塊。 – vkrams

相關問題