2015-10-14 35 views
0

我有一個Django的形式,並且升想傳遞一個用戶實例被創建Django的通用戶實例表單時創建窗體

第一種方法的形式時

這其中l創建形成,並通過用戶的實例:

form = QuestionForm(request.user, request.POST) 

而且內部的QuestionForm

def __init__(self, user, *args, **kwargs): 
    super(QuestionForm, self).__init__(*args, **kwargs) 
    self.data = user 
    log.info(self) 

Study.objects.filter(owner = self.data.id)) 

第二種方法 這是其中l創建形式和傳遞請求:

form = QuestionForm (..., request=request) 

而且裏面的QuestionForm

def __init__(self, *args, **kwargs): 
    self.request = kwargs.pop("request") 
    super(MyForm, self).__init__(*args, **kwargs) 

ref = forms.ModelChoiceField(queryset=Study.objects.filter(owner = self.request.user.id)) 

現在我上午收到錯誤,自我沒有定義和因爲我不能得到用戶名查詢研究類

任何幫助將不勝感激

+1

是什麼線意味着初始化方法做到這一點? 'Study.objects.filter(owner = self.request.user.id))' 它看起來像沒有任何方法,這就是爲什麼它沒有任何自變量可以使用。 – Nick

+0

@Nick這是完整的代碼ref = forms.ModelChoiceField(queryset = Study.objects.filter(owner = self.request.user.id)) –

+0

@ErnestAppiah你應該用你的代碼更新你的問題。請始終發佈您正在運行的實際代碼。 –

回答

0

如果你這樣做的代碼字段聲明節像

class QuestionForm(forms.Form): 
    ref = forms.ModelChoiceField(queryset=Study.objects.filter(owner=...) 

那麼它將無法工作,因爲它仍然不具備自變量。

你可以這樣

​​
+0

感謝Nick,我已經修改了你的初始答案並且爲我解決了這個問題。我已經接受了你的回答,並且非常感謝 –

+0

@ ErnestAppiah我的榮幸:)但看起來你並沒有接受我的回答。你應該可以用綠色標記來標記它。 – Nick