User Model (Django で事前定義) と、ForeignKey を介して接続された UserProfile モデルがあります。
ある種の登録フォームとして単一のテンプレートで使用する 2 つの別個の ModelForms を作成しています。
models.py
class UserProfile(models.Model):
# This field is required.
user = models.ForeignKey(User, unique=True, related_name="connector")
location = models.CharField(max_length=20, blank=True, null=True)
フォーム.py
class UserForm(ModelForm):
class Meta:
model = User
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
ただし、ページを読み込んでフォーム情報を入力すると、UserProfileForm では検証のためにユーザー フィールドを選択または入力する必要があります。
ただし、この「ユーザー」は現在作成中のユーザーであるため、まだ作成されていない/まだ作成されているため、「ユーザー」を選択できません。
このユーザーのフィールドの属性が unique=true であることは知っていますが、このフィールドを「オプション」にする方法はありますか?
私のビュー(以下)は、ユーザーオブジェクトが作成されると、UserProfileの外部キーをこの新しく作成されたユーザーオブジェクトに設定するように処理する必要があります(views.pyも何か間違っている場合を除きます)。
ビュー.py
@csrf_protect
def register(request):
if request.method == 'POST':
form1 = UserForm(request.POST)
form2 = UserProfileForm(request.POST)
if form1.is_valid() and form2.is_valid():
#create initial entry for user
username = form1.cleaned_data["username"]
password = form1.cleaned_data["password"]
new_user = User.objects.create_user(username, password)
new_user.save()
#create entry for UserProfile (extension of new_user object)
profile = form2.save(commit = False)
profile.user = new_user
profile.save()
return HttpResponseRedirect("/books/")
else:
form1 = UserForm()
form2 = UserProfileForm()
c = {
'form1':form1,
'form2':form2,
}
c.update(csrf(request))
return render_to_response("registration/register.html", c)