2015-04-26 28 views
1

我正在使用Django 1.8和django-allauth。我有一個簡單的下拉菜單,允許我的用戶選擇一個人物模型。 我有一個UserCharacter模型,看起來像這樣:如何在django ModelForm中設置基於用戶的表單域選擇(使用django-allauth)

class UserCharacter(models.Model): 
     user = models.ForeignKey(User) 
     character = models.ForeignKey(Character) 
     is_default = models.BooleanField(default=False) 

在我的主要形式,我只顯示「字符」字段,它表現爲性格對象的下拉菜單。到目前爲止,這麼好 - 用戶可以選擇一個字符,並將其保存爲UserCharacter關聯。

我想要做的是顯示所有沒有UserCharacter鏈接到當前登錄用戶的Character對象。我通常會用limit_choices_to功能,像這樣:

character = models.ForeignKey(Character, limit_choices_to={'id__in': UserCharacter.objects.filter(user_id=[USER_ID])) 

我的問題是,我不知道如何訪問來自UserCharacter型號或者從的ModelForm當前用戶對象。我通常需要訪問當前請求以獲取django-allauth登錄的用戶對象。通常代替[USER_ID]是我把

self.request.user.id 

擺脫Django的allauth當前用戶的ID,但我不能這樣做,從型號在這裏。我將如何去改變基於當前用戶對象的ModelForm中的表單選擇? 非常感謝!

回答

0

由於這需要當前登錄的用戶,因此您必須在View中執行此操作,根據您的用戶覆蓋表格字符QuerySet

form.character.queryset = Character.objects.filter(....) 

您也可以通過request.user的形式和在構造函數中做過濾那裏。

相關問題