Python 在视图内查询时,测试数据库为空
我有一个场景,其中我有条件地检查访问者的注册表单数据(通过Python 在视图内查询时,测试数据库为空,python,django,database,Python,Django,Database,我有一个场景,其中我有条件地检查访问者的注册表单数据(通过UserCreationForm的子类) 如果没有具有访问者提供的用户名的现有用户,则会创建一个新的User。否则,将检查条件,访问者将收到一条闪光消息(即,f“Username{Username}存在。请选择其他用户名。” 在创建TestCase时,我使用User.objects.create\u User()创建了一个现有的User。在测试视图时,执行查询User.objects.get()时,QuerySet为空。因此,引发了Use
UserCreationForm
的子类)
如果没有具有访问者提供的用户名的现有用户,则会创建一个新的User
。否则,将检查条件,访问者将收到一条闪光消息(即,f“Username{Username}存在。请选择其他用户名。”
在创建TestCase
时,我使用User.objects.create\u User()
创建了一个现有的User
。在测试视图时,执行查询User.objects.get()时,QuerySet为空
。因此,引发了User.DoesNotExist
,这不是期望的结果。相反,期望的结果是分支到else
子句
当在setUpTestData
中填充视图时,为什么测试数据库在测试视图时没有User
实例
测试视图.py
class TestCreateNewChef_Case2(TestCase):
def setUpTestData(cls):
User.objects.create_user(
username='masterchef',
password='password',
)
cls.user_signup_data = {
'username': 'masterchef',
'password1': 'secret',
'password2': 'secret'
}
print(User.objects.all()) # <QuerySet [<User: masterchef>]>
def test_new_chef_sign_up_username_taken(self):
response = self.client.post(
reverse("chef:register"),
self.user_signup_data,
follow=True
)
self.assertRedirects(response, reverse("chef:register"))
self.assertTemplateUsed('chef/register_chef.html')
self.assertContains(
response,
"<p>Username masterchef exists. Choose another username.</p>",
html=True
)
def register_chef(request):
if request.method == 'POST':
new_user_form = ChefRegisterationForm(request.POST)
if new_user_form.is_valid():
try:
user = User.objects.get(
username=new_user_form.cleaned_data['username']
)
stored_password = check_password(
new_user_form.cleaned_data['check_password'],
user.password
)
except User.DoesNotExist:
# if no Users exist with the username, create a new user
else:
# conditionally check existing users with the submitted username
(Pdb)User.objects.all()
(Pdb)n
>(17) 注册厨师()
->user=user.objects.get(
(Pdb)n
>(18)注册厨师()
->用户名=新的用户表单。已清理的数据['username']
(Pdb)n
django.contrib.auth.models.DoesNotExist:用户匹配查询不存在。
您应该与classmethod
decorator一起使用:
@classmethod
def setUpTestData(cls):
User.objects.create_user(
username='masterchef',
password='password',
)
cls.user_signup_data = {
'username': 'masterchef',
'password1': 'secret',
'password2': 'secret'
}
@classmethod
def setUpTestData(cls):
User.objects.create_user(
username='masterchef',
password='password',
)
cls.user_signup_data = {
'username': 'masterchef',
'password1': 'secret',
'password2': 'secret'
}