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