我正在尝试使用以前的stackoverflow答案和Google来获取表格工作,但似乎没有任何工作适合我。
我有一个模型项目和一个项目团队,我希望用户能够从他创建的团队中选择一个并将其链接到项目。
我正在使用一个名为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__
中放置用户,则会得到表格,但是单击POST时会出现错误AttributeError: 'MyUser' object has no attribute 'user'
最佳答案
您的__init__
方法采用User
和request
,
def __init__(self, User, request, *args, **kwargs):
但您只能将以下其中一项传递给表单:
select_form = EditSelectTeam(request.user, request.POST)
...
select_form = EditSelectTeam(request)
我将
__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)