尝试创建一个表单,您可以在其中注册用户,并将自己添加到一个或多个类别。这样做时出错:
/ users / add-user /
中的TypeError'categories'是此函数的无效关键字参数
这是我的forms.py:
class AddUser(forms.Form):
name = forms.CharField()
title = forms.CharField()
website = forms.CharField(required=False)
email = forms.EmailField()
phone = forms.CharField(required=False)
company = forms.ModelChoiceField(queryset=Company.objects.all())
categories = forms.ModelMultipleChoiceField(queryset=Category.objects.all())
最后一行是我遇到麻烦的。
这是我的views.py:
def add_user(request):
if request.method == 'POST':
form = AddUser(request.POST)
if form.is_valid():
cd = form.cleaned_data
try:
p = User.objects.get(email=cd['email'])
error = "There's already a user with that e-mail adress registered. Maybe he/she is already here?"
return render_to_response('users/add_user.html', {'form': form, 'error': error}, context_instance=RequestContext(request))
except User.DoesNotExist:
p = User(name=cd['name'], title=cd['title'], website=cd['website'], email=cd['email'], phone=cd['phone'], company=cd['company'], categories=cd['categories'])
p.save()
return HttpResponseRedirect('../thanks/')
else:
form = AddUser(request.POST)
error = "You can't really submit empty forms. Try adding something useful :)"
return render_to_response('users/add_user.html', {'form': form}, context_instance=RequestContext(request))
如果有人对此问题有任何建议(或者甚至是改善我的代码的建议),我会很高兴的!我是Django的初学者,感谢所有的帮助。
答案 0 :(得分:0)
你的问题在于:
p = User(name=cd['name'], title=cd['title'], website=cd['website'], email=cd['email'], phone=cd['phone'], company=cd['company'], categories=cd['categories'])
问题是User模型不包含类别字段,就像它不包含网站或公司一样。请参阅list of the available fields。
与Django的auth系统结合使用处理附加数据有不同的方法。将用户类升级或向用户添加具有附加信息和一对一字段的模型。后一种选择似乎是suggested,所以我建议沿着这条道路前进。
答案 1 :(得分:0)
有点挑剔,但你确实要求其他建议。这一点:
else:
form = AddUser(request.POST)
应该(IMO)改为:
else:
form = AddUser()
没有必要使用request.POST来获取GET请求。我从来没有尝试过,但我猜它会起作用,你只是得到一个空集。所以不是错误,但可能是混乱的来源。
您的错误消息也未被使用。在这种情况下,页面上的GET根本不是错误,它只是页面最初的显示方式。