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'
    }