【发布时间】:2015-11-21 19:47:41
【问题描述】:
在我的 models.py 中,我扩展了 User 模型,这要归功于 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 通过 OneToOneField 链接到 User),则 User 内的字段已正确填充(但链接模型MyUser 显然是空的)
【问题讨论】:
-
你还应该检查
form.cleaned_data['username']和form.cleaned_data['password']是否存在,然后在new_user.save()之后检查new_user是否有usernamepassword设置正确。
标签: python django django-models django-forms