我有一個用戶模型(由Django預先定義)和一個UserProfile模型通過一個ForeignKey連接。如何在Django中使unique = true的外鍵成爲「可選」?
我創建了兩個單獨的模板框架用於單個模板作爲排序註冊表單。
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)
forms.py
class UserForm(ModelForm):
class Meta:
model = User
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
然而,當我加載網頁表單填寫信息時,UserProfileForm要求我選擇/填寫用戶字段爲了驗證。
然而,這個「用戶」是現在正在創建的用戶,所以我不能選擇一個「用戶」,因爲它尚未創建/仍在創建。
我知道這個用戶是字段有unique = true屬性,但有一種方法可以使此字段爲「可選」嗎?我的視圖(下面)應該處理它,使得一旦創建了用戶對象,我將把UserProfile的外鍵設置爲這個新創建的用戶對象(除非我做錯了我的views.py)。
views.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)