В моем 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()
(модель MyUser
которая связана с User
по OneToOneField), поля внутри User
правильно заполнены (но связанная модель MyUser
остается пустым, очевидно)
Вы должны также проверить, если 'form.cleaned_data [ 'имя пользователя']' и ' form.cleaned_data ['password'] 'есть, а затем проверить сразу после' new_user.save() ', чтобы убедиться, что' 'new_user' правильно установил' username' 'password'. –