Django REST framework - Как я могу унифицировать сериализатор модели?

может ли кто-нибудь помочь. Я действительно не могу понять, как протестировать мою модель сериализатора. Я использую ModelViewSet. Не могу найти никакой информации в google.

тесты, в которых я пытаюсь протестировать сериализатор

def test_company_serializer(self):
    self.user1 = User.objects.create_user(
        username='user1',
        password='password',
    )
    self.user2 = User.objects.create_user(
        username='user2',
        password='password',
    )
    serializer_data = CompanySerializer(self.company1, self.company2, many=True).data
    expected_data = [
        {'name': 'test_company1', 'owner': 'user1'},
        {'name': 'test_company2', 'owner': 'user2'},
    ]
    self.assertEqual(serializer_data, expected_data)

Ассертеррор выглядит следующим образом

AssertionError: When a serializer is passed a `data` keyword argument you must call `.is_valid()` before attempting to access the serialized `.data` representation.
You should either call `.is_valid()` first, or access `.initial_data` instead.

models.py

class Company(models.Model):
    name = models.CharField(max_length=255, unique=True, help_text='Название')
    owner = models.OneToOneField(User, on_delete=models.CASCADE, help_text='Владелец')
    created = models.DateTimeField(auto_now_add=True, help_text='дата регистрации компании')
    slug = models.SlugField(
        max_length=255, 
        unique_for_date='created', 
        blank=True, 
        validators=[validate_slug]
    )

    class Meta:
        ordering = ['-created']
        verbose_name_plural = 'Companies'

    def __str__(self):
        return self.name

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Company, self).save(*args, **kwargs)

serializers.py

class CompanySerializer(serializers.ModelSerializer):
    medicines = serializers.HyperlinkedRelatedField(
        many=True,
        read_only=True,
        view_name='medicine-detail',
    )
    owner = serializers.ReadOnlyField(source='owner.username')

    class Meta:
        model = Company
        fields = (
            'url',
            'pk',
            'name',
            'owner',
            'created',
            'medicines',
        )

Как указано в ошибке и в doc, при использовании .data при инстанцировании сериализатора с (data=...) необходимо вызвать is_valid() перед выполнением десериализации.

Возможно, вы захотите выполнить сериализацию вместо этого:

serializer_data = CompanySerializer(data=[self.company1, self.company2], many=True).data
Вернуться на верх