1. 定义了一个SignupForm(注册用户),又override了save():目的是创建一个用户。save()代码如下:
def save(self):
return MyUser.objects.create_user(self.instance.email, # 这三个参数是关键
self.instance.username,
self.instance.password)
2. 我在views.py里调用form.save()一切正常, 代码如下:
def user_signup(request):
form = SignupForm()
if request.method == 'POST':
form = SignupForm(data=request.POST)
if form.is_valid():
form.save()
# extra_tags是Bootstrap中的样式
messages.success(request, const.SIGNUP_SUCCESS,
extra_tags='alert-success')
return redirect('user_login')
return render(request, 'signup.html', {'form': form})
3. 在单元测试test_forms.py中,调用form.save(), 调试发现create_user的三个参数(self.instance.email、self.instance.username、self.instance.password)全是空的,代码如下:
form = SignupForm(data={'email': 'a@a.com', 'username': 'test', 'password': '774411'})
user = form.save() # 这句会报错
请问哪位大神知道是什么原因?
知道原因了,这应该是Django (1.10.1)的一个bug.
因为我在单元测试中,这样做是不行的:
但是在save()之前打印一下form,就可以了: