Ошибка при предоставлении аргументов в проекте django во время тестирования

Я новичок в django мне нужна небольшая помощь в тестировании определенного раздела пользовательской модели.

Вот ошибка, возникающая при выполнении теста

Вот мои коды

models.py

    from pyexpat import model
from django.utils.translation import ugettext_lazy as _
from django.db import models
from django.utils.crypto import get_random_string
from django.db import models
from django.contrib.auth.models import(
                                        BaseUserManager,
                                        AbstractBaseUser,
                                        PermissionsMixin,
                                        )



def generate_vid():
    """Generates a vid for the users"""
    not_unique = True
    while not_unique:
        vid = get_random_string(10, 'abcdefg0123456789')
        if not User.objects.filter(v_id = vid).exists():
            not_unique=False

        return vid

class UserManager(BaseUserManager):
    """Model for user manager"""

    def create_user(self, username, password=None, **params):
        """Create and return a user"""
        user = self.model(username=username, **params)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, username, password, **params):
        """Create and return a user"""
        params.setdefault('is_staff',True)
        params.setdefault('is_superuser',True)
        params.setdefault('is_active',True)

        if params.get('is_staff') is not True:
            raise ValueError(_('Superuser must have is_staff=True.'))
        if params.get('is_superuser') is not True:
            raise ValueError(_('Superuser must have is_superuser=True.'))
        return self.create_user(username, password, **params)


class User(AbstractBaseUser, PermissionsMixin):
    """Models for user"""

    v_id = models.CharField(
                            max_length=10,
                            default=generate_vid,
                            primary_key = True,
    )
    username = models.CharField(max_length=20, unique=True)
    email = models.EmailField(blank=True, unique = True)
    # parent_id = models.ForeignKey('User', on_delete=models.SET_DEFAULT, default=0)
    usertype = models.CharField(max_length=1, choices=[('f', 'family'), ('v', 'veteran')])


    REQUIRED_FIELDS = []
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    USERNAME_FIELD = 'username'
    objects = UserManager()

    def __str__(self):
        return self.username

views.py

    from base.models import (
    User,)


from .serializers import (
        UserSerializer,)

from rest_framework import viewsets


class UserViewset(viewsets.ModelViewSet):
    """Views for user model"""
    serializer_class = UserSerializer
    queryset = User.objects.all()

urls.py

    """
URL mappings for the user API

"""
from rest_framework import routers
from django.urls import path, include
from . import views

router = routers.DefaultRouter()
router.register(r'user', views.UserViewset)

app_name='user'

urlpatterns = [
                path('', include(router.urls)),
]

Тест, который я создал для проверки менеджера моделей (т.е. создание пользователя с помощью User.objects.create()) работает нормально ...

Но когда я попытался создать api и протестировать пользовательский api, используя APIClient, пост не работал...

тестовый код

from django.urls import reverse
from django.test import TestCase
from rest_framework.test import APIClient
from rest_framework import status

CREATE_USER_URL = reverse('user:user-list')

class PublicUserTests(TestCase):
    """Tests for user API"""

    def setUp(self):
        self.client = APIClient()

    def test_create_user_success(self):
        """Test creating a user is succesful"""
        payload = {
            'username': 'testusername',
            'password': 'testpas123',
        }

        res = self.client.post(CREATE_USER_URL, payload)
        # self.assertEqual(res, status.HTTP_201_CREATED)
        self.assertEqual(res.status_code, status.HTTP_201_CREATED)

Любезная помощь.

Ваш сериализатор должен быть ModelSerializer, а не базовым сериализатором. Только ModelSerializer будет добавлять поля на основе мета-атрибутов, основанных на модели.

https://www.django-rest-framework.org/api-guide/serializers/

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