2010-12-10 66 views
0

我正在嘗試訪問request.user或獲取當前登錄的用戶,以便用戶過濾內容,即只通過登錄用戶獲取獎盃或bag_list。Django表單不接受請求。用戶

我的表單有一個或多個元素,如下所示。

class HuntingReportForm(ModelForm): 
    date_travel_started = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2012))) 
    date_travel_ended = forms.DateField(widget=extras.SelectDateWidget(years=range(1970,2012))) 
    wish_list = forms.ModelMultipleChoiceField(queryset=Specie.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False), required=False) 
    bag_list = forms.ModelMultipleChoiceField(queryset=Trophies.objects.all(), widget=FilteredSelectMultiple("verbose name", is_stacked=False), required=False) 

    class Meta: 
     model = HuntingReport 
     exclude = ['user',] 

    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user', None) 
     self.validate = kwargs.pop('validate', False) 
     super(HuntingReportForm, self).__init__(*args, **kwargs) 

     self.fields['bag_list'].queryset = Trophies.objects.filter(user = self.user) 
     users = User.objects.filter(userprofile__outfitter=True) 
     self.fields['outfitter'].choices = [('', '')] + [(user.pk, user.get_full_name()) for user in users] 
     self.fields.keyOrder = ['title', 'date_travel_started', 'date_travel_ended', 'outfitter', 'wish_list', 'bag_list','report'] 

任何幫助,將不勝感激。

Traceback: 
File "/Library/Python/2.6/site-packages/django/core/handlers/base.py" in get_response 
    99.      response = callback(request, *callback_args, **callback_kwargs) 
File "/Library/Python/2.6/site-packages/django/contrib/auth/decorators.py" in __call__ 
    78.    return self.view_func(request, *args, **kwargs) 
File "/Users/ApPeL/Sites/Django/omu2/../omu2/hunting_report/views.py" in create 
    56.   form = HuntingReportForm(initial={'me':request.user}) 
File "/Users/ApPeL/Sites/Django/omu2/hunting_report/forms.py" in __init__ 
    31.   self.fields['bag_list'].queryset = Trophies.objects.filter(user = self.user) 

Exception Type: AttributeError at /hunting-reports/new/ 
Exception Value: 'HuntingReportForm' object has no attribute 'user' 
+0

那麼什麼又是這個問題嗎? – 2010-12-10 13:12:48

+0

我想要以下行來訪問登錄的用戶。 ### self.fields ['bag_list']。queryset = Trophies.objects.filter(user = user) – ApPeL 2010-12-10 13:17:00

+0

如果你得到一個優秀的,你可以發佈它嗎?或告訴我們問題是什麼?此外,我認爲在大多數情況下,將用戶存儲在'用戶'中是有意義的,但是在'self.user'中,那麼您也可以將其用於其他形式的方法中... – 2010-12-10 13:25:48

回答

7

如果初始化HuntingReportFrom(user=request.user)形式,這應該工作:

def __init__(self, *args, **kwargs): 
     self.user = kwargs.pop('user', None) 
     self.validate = kwargs.pop('validate', False) 
     super(HuntingReportForm, self).__init__(*args, **kwargs) 
     self.fields['bag_list'].queryset = Trophies.objects.filter(user = self.user) 
+0

感謝您的更新,雖然這些更改現在導致表單不驗證該特定的字段,如果用戶選擇一個項目,它只是拋出以下驗證錯誤。 「選擇一個有效的選擇,13(這是選項值)不是一個有效的選擇。」 – ApPeL 2010-12-11 11:40:42