在我的models.py,我延長了用戶模式,由於採用了OneToOneField:爲什麼有些字段沒有保存在OneToOneField模型中?
class MyUser(User):
user = models.OneToOneField(User, primary_key=True)
# Extra fields:
favourite_colour = models.CharField(max_length=100, blank=False, null=False)
def __str__(self):
return self.user.username
然後,在views.py,我試圖從形式保存:
def register(request):
if request.POST:
form = UserForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
favourite_colour = form.cleaned_data['favourite_colour']
new_user = User.objects.create_user(username=username, password=password)
new_user.save()
new_myuser = MyUser(user=new_user)
new_myuser.favourite_colour = favourite_colour
# IF I COMMENT OUT THE LINE BELOW, the fields of User are correctly saved
new_myuser.save()
# TESTING WHETHER IT'S SAVED :
print("{} was saved in User, with username = {}".format(new_user, new_user.username))
return HttpResponseRedirect(reverse('home'))
else:
# display the page with the errors
return render(request, 'registration/registration_form.html', {'form': form})
else:
# display the blank form:
form = UserForm()
return render(request, 'registration/registration_form.html', {'form': form})
如果我用例如我得到的簡單表格進行測試: person1 was saved in User, with username = person1
。
但是,如果我在我的數據庫查詢(db.sqlite3),創建的對象沒有用戶名或密碼,只有id
,is_superuser
,is_staff
,is_active
,date_joined
定義。
這就好像我的字段password
和username
被擦除後。
正如在代碼中評論指出,如果我註釋掉MyUser.save()
(這是由一個OneToOneField掛User
模型MyUser
),裏面User
的字段正確填寫(但鏈接模型MyUser
保持爲空明顯)
您也應該檢查是否'form.cleaned_data [ '用戶名']'和' form.cleaned_data ['password']'在那裏,然後在'new_user.save()'後面檢查'new_user'是否正確設置了'username'' password'。 –