1

尝试创建一个表单,您可以在其中注册为用户,并将自己添加到一个或多个类别。执行此操作时出错:

/users/add-user/ 处的类型错误

'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 的初学者,感谢所有帮助。

4

2 回答 2

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 模型不包括类别字段,就像它不包括网站或公司一样。查看可用字段的列表

结合 Django 的身份验证系统,有不同的方法来处理额外的数据。子类化 User 类或向 User 添加带有附加信息和一对一字段的模型会浮现在脑海中。似乎建议使用后一种选择,所以我建议沿着这条路走。

于 2012-07-18T14:32:44.047 回答
0

有点挑剔,但您确实要求提供其他建议。这一点:

else:
    form = AddUser(request.POST)

应该(IMO)改为:

else:
    form = AddUser()

对于 GET 请求,无需使用 request.POST。我从未尝试过,但我猜它会起作用,你只是得到一个空集。所以不是错误,但可能是混乱的根源。

您的错误消息也没有被使用。在这种情况下,页面上的 GET 根本不是错误,它只是页面最初显示的方式。

于 2012-07-18T14:47:29.327 回答