Как протестировать форму регистрации в django?
У меня есть тест для проверки правильности работы формы регистрации, но пользователь не создается. Я не могу понять почему. Например, если в тесте использовать assertEqual(Profile.objects.last().user, 'test1'), то выдается, что это объект Nonetype. Если я проверю код состояния ответа, то он равен 200. Таким образом, я могу быть уверен, что страница работает. И, наконец, если я перейду на эту страницу регистрации и создам пользователя с той же информацией самостоятельно, он будет создан успешно.
В чем проблема и как я могу ее решить?
Модель:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
city = models.CharField(max_length=36, blank=True)
phone = models.IntegerField(blank=True)
verification = models.BooleanField(default=False)
quantity_posts = models.IntegerField(default=0)
def __str__(self):
return str(self.user)
def get_absolute_url(self):
return reverse('information', args=[str(self.pk)])
Форма:
class RegisterForm(UserCreationForm):
city = forms.CharField(max_length=36, required=False, help_text='Город')
phone = forms.IntegerField(required=False, help_text='Сотовый номер')
class Meta:
model = User
fields = ('username', 'city', 'phone', 'password1', 'password2')
Вид:
def register_view(request):
if request.method == 'POST':
form = RegisterForm(request.POST)
if form.is_valid():
user = form.save()
city = form.cleaned_data.get('city')
phone = form.cleaned_data.get('phone')
Profile.objects.create(
user=user,
city=city,
phone=phone,
)
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=password)
login(request, user)
return redirect('/')
else:
form = RegisterForm()
return render(request, 'users/register.html', {'form': form})
часть основных урлов:
path('users/', include('app_users.urls'))
часть урлов приложений:
path('register/', register_view, name='register')
тест:
def test_if_can_register_profile(self):
self.client.post('/users/register/', {
'username': 'test1',
'city': 'pavlodar',
'phone': 87055551122,
'password': 'Mypassword777',
'password confirmation': 'Mypassword777'
})
self.assertTrue(Profile.objects.filter(user__username='test1').exists())