2017-09-26 45 views
1

我想讓我的表單工作使用以前的計算器的答案和谷歌,但似乎沒有爲我工作。FOM缺少1個需要的位置參數:'請求'的形式

我有一個模型項目和一個項目團隊,我希望用戶能夠從他創建的團隊中選擇一個並將其鏈接到項目。

我使用所謂的MYUSER

自定義的用戶是我的形式,以便選擇一個團隊:

from django import forms 
from django.contrib.auth.models import User 
from registration.models import MyUser 
from .models import Project, Team 
from django.contrib.auth import get_user_model 

User = get_user_model() 

class EditSelectTeam(forms.Form): 

    team_choice = forms.ModelChoiceField(widget=forms.RadioSelect, queryset=None) 

    def __init__(self, User, request, *args, **kwargs): 
     super(EditSelectTeam, self).__init__(*args, **kwargs) 
     self.fields['team_choice'].queryset = Team.objects.all().filter(team_hr_admin = request.User) 

我的看法:

def TeamSelect(request): 
    if request.method == "POST": 
     select_form = EditSelectTeam(request.user, request.POST) 
     if select_form.is_valid(): 
      print('sucess') 
     else: 
      print('Fail') 

    else: 
     select_form = EditSelectTeam(request) 
    return render(request,'link_project.html', 
          {'select_form':select_form }) 

如果在我的形式,我把request.User我收到我認爲的錯誤:

TypeError: __init__() missing 1 required positional argument: 'request' 

如果我不把用戶在我__init__我得到的形式,但是當我點擊文章中,我得到的錯誤

AttributeError: 'MyUser' object has no attribute 'user' 
+0

其他:'select_form = EditSelectTeam()'試試這個 – Akash

回答

1

__init__方法需要Userrequest

def __init__(self, User, request, *args, **kwargs): 

但只有你曾經通過其中的一個窗體:

select_form = EditSelectTeam(request.user, request.POST) 
... 
select_form = EditSelectTeam(request) 

我WOU LD改變__init__方法只取user(小寫),

def __init__(self, user, *args, **kwargs): 
    super(EditSelectTeam, self).__init__(*args, **kwargs) 
    self.fields['team_choice'].queryset = Team.objects.all().filter(team_hr_admin=user) 

然後改變視圖總是傳遞request.user

select_form = EditSelectTeam(request.user, request.POST) 
... 
select_form = EditSelectTeam(request.user) 
+0

隨着編輯我得到:__ __的init()失蹤1個人需要的位置參數: '請求' – Ben2pop

+0

我上面的代碼不會給這個錯誤。 – Alasdair

+0

好了!它工作thx你;)什麼完全代表要求? – Ben2pop

相關問題