1

ユーザーとしてサインアップし、1 つ以上のカテゴリに自分自身を追加できるフォームを作成しようとしています。実行中にエラーが発生しました:

/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 の初心者であり、すべての助けに感謝します。

4

2 に答える 2

0

ちょっとしたピックですが、他の提案を求めました。このビット:

else:
    form = AddUser(request.POST)

(IMO) を次のように変更する必要があります。

else:
    form = AddUser()

GET リクエストに request.POST を使用する必要はありません。私はそれを試したことはありませんが、うまくいくと思います。空のセットを取得するだけです。したがって、エラーではありませんが、混乱の原因となる可能性があります。

エラーメッセージも使用されていません。この場合、ページでの GET はエラーではなく、ページが最初に表示される方法です。

于 2012-07-18T14:47:29.327 に答える
0

あなたの問題はここにあります:

p = User(name=cd['name'], title=cd['title'], website=cd['website'], email=cd['email'], phone=cd['phone'], company=cd['company'], categories=cd['categories'])

問題は、Web サイトや会社が含まれていないのと同じように、User モデルにカテゴリ フィールドが含まれていないことです。利用可能なフィールドのリストを参照してください。

Django の認証システムと組み合わせて追加データを処理するには、さまざまな方法があります。User クラスをサブクラス化するか、追加情報と 1 対 1 のフィールドを持つモデルを User に追加することが頭に浮かびます。後者のオプションが提案されているようですので、その道をたどることをお勧めします。

于 2012-07-18T14:32:44.047 に答える