Как правильно написать тест (pytest) для RegisterView не работает (представление работает правильно)

У меня получилось создать View для регистрации пользователя в django. И это работает. Пользователь, добавленный вручную через форму (пост), отображается в базе данных.

В настоящее время я пытаюсь написать тест для этого представления, и это не удается. Я продолжаю получать;

AttributeError: 'User' object has no attribute 'items'

tests.py

# test for Register View
@pytest.mark.django_db
def test_012_register_view_post(client, new_user):
    url = reverse('register')
    response = client.post(url, new_user)
    assert response.status_code == 302
    assert response.url == reverse('login')
    User.objects.get(**new_user)

conftest.py (протестировано 2 разных приспособления) - оба возвращают одинаковый результат (AttributeError)

@pytest.fixture
def users():
    lst = []
    for user in range(10):
        user_name = 'User_' + str(user)
        lst.append(User.objects.create(username=user_name))
    return lst


@pytest.fixture
def new_user():
    username = 'User@test.pl'
    email = 'User@test.pl'
    first_name = 'User'
    last_name = 'Test'
    x = User.objects.create(username=username, email=email, first_name=first_name, last_name=last_name)
    x.save()
    return x

view.py

class RegisterView(View):

    def get(self, request):
        form = RegisterForm()
        return render(request, 'register.html', {'form': form})

    def post(self, request):
        form = RegisterForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data['email']
            password = form.cleaned_data['password1']
            first_name = form.cleaned_data['first_name']
            last_name = form.cleaned_data['last_name']
            u = User()
            u.username = email
            u.email = email
            u.first_name = first_name
            u.last_name = last_name
            u.set_password(password)
            u.save()
            return redirect('/login')
        return render(request, 'form.html', {'form': form})

form.py

class RegisterForm(forms.ModelForm):
    first_name = forms.CharField(max_length=128, widget=forms.TextInput(attrs={'class': 'form-group',
                                                                               'placeholder': 'Imię'}), label='')
    last_name = forms.CharField(max_length=128, widget=forms.TextInput(attrs={'class': 'form-group',
                                                                              'placeholder': 'Nazwisko'}), label='')
    email = forms.EmailField(max_length=128, widget=forms.EmailInput(attrs={'class': 'form-group',
                                                                            'placeholder': 'Email'}), label='')
    password1 = forms.CharField(max_length=128, widget=forms.PasswordInput(attrs={'class': 'form-group',
                                                                                  'placeholder': 'Hasło'}), label='')
    password2 = forms.CharField(max_length=128, widget=forms.PasswordInput(attrs={'class': 'form-group',
                                                                                  'placeholder': 'Powtórz hasło'}),
                                label='')

    class Meta:
        model = User
        fields = ['email']

    def clean(self):
        data = super().clean()
        if data['password1'] != data['password2']:
            raise ValidationError('Hasła nie są takie same')

        return data

шаблон register.py

{% extends 'base.html' %}
    {% block content %}
    <header class="header">
        {% include 'nav-not-logged.html' %}
        <section class="login-page">
          <h2>Załóż konto</h2>

            <form method="post">
                {% csrf_token %}
                 {% for fm in form %}
                    <div class="form-group">
                       {{ fm }}
                    </div>
                {% endfor %}

                <div class="form-group form-group--buttons">

                <button class="btn" type="submit">Załóż konto</button>
                <a href="{% url 'login' %}" class="btn btn--without-border">Zaloguj się</a>

            </div>

          </form>
        </section>
    </header>
    {% endblock %}

urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path("", views.LandingPageView.as_view(), name='landing-page'),
    path("register/", views.RegisterView.as_view(), name='register'),

Что означает эта ошибка? И как я могу заставить тест работать?

Вернуться на верх