2009-11-27 75 views
2

我使用Django的用戶管理與UserProfiles組合使用ForeignKeys鏈接到用戶模型。現在,我想從UserAdmin中搜索用戶配置文件中的字段。熱點添加在UserProfile中搜索Django中UserAdmin的功能| search_fields w/ForeignKey

我最好的猜測是,用戶是這樣的:

class UserAdmin(auth.admin.UserAdmin): 

    def field_name(self, obj): 
     return obj.get_profile().name 

    list_display = ('field_name',) 

    search_fields = ('field_name',) 

而list_display工作正常,search_fields提交查詢時,給了我一個錯誤信息:無法解析關鍵字「FIELD_NAME」到現場。選擇是:[...]

你有什麼線索怎麼做?先謝謝你。

回答

2

您可以使用帶雙下劃線__的queryset表示法來指示連接,例如。

search_fields = ('company_name','user__username') 

http://docs.djangoproject.com/en/dev/topics/db/queries/#lookups-that-span-relationships

更多

+0

真正的問題是,'auth_user'表沒有一個ForeignKey的剖面模型,但反過來。用戶模型中唯一的連接是'.get_profile()'方法,它不能使用雙下劃線進行訪問,因爲它是一種方法而不是字段。 – jnns 2009-11-27 09:21:10

+1

抱歉,反向關係可以起作用。類似profile__name或profile__name__contains,具體取決於您的模式。在ipython中取悅這些東西是很好的。它將是User.objects.filter(what__you__want ='foo')。如果你仍然有probs,你可能想要發佈你的個人資料模型 – michael 2009-11-28 00:06:46

+0

謝謝,邁克爾。反向關係做了訣竅。我不知道爲什麼我沒有從django文檔的鏈接中獲得。也許我太累了,無法清晰地思考。 – jnns 2009-11-28 00:51:22