Ошибка при предоставлении аргументов в проекте 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/