2

これは私の forms.py スニペットです

class ContactForm(forms.ModelForm):
    class Meta:
        model = Contact
        exclude = ('user',)

これは私のviews.pyスニペットです

def contact(request, template_name):
    if request.method == "POST":
        form = ContactForm(request.POST)
        if form.is_valid():
            obj = form.save(commit=False)
            obj.user = request.user
            obj.save()
            return HttpResponseRedirect('/newuser/step2/')
    else:
        if (Contact.objects.filter(user=request.user)):
            contact_obj = Contact.objects.get(user_id=request.user.id)
            form = ContactForm(instance = contact_obj)
        else:
            form = ContactForm()

    return render_to_response(template_name, RequestContext(request, {'form' : form}))

登録ユーザーのデータを初めて入力すると、データがテーブルに正常に入力されます。フォームに再度アクセスすると、データベースからのデータが読み込まれますが、再送信すると、以下のエラーが発生します

Exception Type: IntegrityError
Exception Value:    (1062, "Duplicate entry '3' for key 'user_id'")
Exception Location: /usr/lib/python2.7/dist-packages/MySQLdb/connections.py in defaulterrorhandler, line 36

私の連絡先テーブルには、自動的に生成された「id」フィールドが主キーとしてあり、「user_id」は外部キー フィールドです。「3」は、ログインしているユーザーの「user_id」です。

私は非常に単純なことをしようとしています。ユーザーのデータをテーブルに保存してリンクします。それを行うより良い方法はありますか?ここで私が間違っているのは何ですか?

4

1 に答える 1