Как создать правильно сериалайзер с методом Create в Django?
Мне нужно сделать сериалайзер для того что бы можно было создать Сеть(Chain), но постоянно выводит ошибку как я не пытался
Модели:
class Address(models.Model):
class Meta:
verbose_name = "Адрес"
verbose_name_plural = "Адреса"
country = models.CharField(verbose_name="Страна", max_length=255)
city = models.CharField(verbose_name="Город", max_length=255)
street = models.CharField(verbose_name="Улица", max_length=255)
def __str__(self):
return f'{self.country} {self.street} {self.city}'
class Contact(models.Model):
class Meta:
verbose_name = "Контакт"
verbose_name_plural = "Контакты"
email = models.CharField(verbose_name='Почта', max_length=255)
address = models.ForeignKey(Address, verbose_name='Адрес', on_delete=models.CASCADE)
def __str__(self):
return f'{self.email} {self.address}'
class Staff(models.Model):
class Meta:
verbose_name = "Сотрудник"
verbose_name_plural = "Сотрудники"
first_name = models.CharField(verbose_name='Имя', max_length=255)
last_name = models.CharField(verbose_name='Фамилия', max_length=255)
is_active = models.BooleanField(verbose_name='Активный', default=True)
def __str__(self):
return f'{self.first_name} {self.last_name}'
class Product(models.Model):
class Meta:
verbose_name = "Продукт"
verbose_name_plural = "Продукты"
title_product = models.CharField(verbose_name='Название Продукта', max_length=255)
model = models.CharField(verbose_name='Модель', max_length=255)
date = models.DateTimeField(verbose_name='Дата выхода Продукта', max_length=255)
def __str__(self):
return f'{self.title_product}'
class Chain(models.Model):
class Meta:
verbose_name = "Сеть"
verbose_name_plural = "Сети"
class Suppler(models.IntegerChoices):
plant = 0, 'Завод'
distributor = 1, 'Дистрибьютор'
dealership = 2, 'Дилерский центр'
large_retail_chain = 3, 'Крупная розничная сеть'
individual_entrepreneur = 4, 'ИП'
title = models.CharField(verbose_name="Название сети", max_length=255)
structure = models.PositiveSmallIntegerField(verbose_name='Структура', choices=Suppler.choices)
def __str__(self):
return f'{self.title} {self.structure}'
class InfoChain(Chain):
class Meta:
verbose_name = "Информация сети"
verbose_name_plural = "Информация сетей"
staff = models.ManyToManyField(Staff, verbose_name='Сотрудники', related_name='staff')
debt = models.FloatField(verbose_name=f'Задолженность', null=True, blank=True)
date_creation = models.DateTimeField(verbose_name='Дата создания', auto_now_add=True)
products = models.ForeignKey(Product, verbose_name='Продукты', related_name='product', on_delete=models.DO_NOTHING)
contacts = models.ForeignKey(Contact, verbose_name='Контакты', on_delete=models.CASCADE)
supplier = models.ForeignKey(Chain, verbose_name='Главный поставщик', on_delete=models.DO_NOTHING,
related_name='suppler', blank=True, null=True)
def __str__(self):
return f'{self.title} {self.debt} {self.products} {self.staff}'
Сериалайзеры:
class ChainSerializer(serializers.ModelSerializer):
class Meta:
model = Chain
fields = '__all__'
class AddressSerializer(serializers.ModelSerializer):
class Meta:
model = Address
fields = '__all__'
class ContactSerializer(serializers.ModelSerializer):
address = AddressSerializer()
class Meta:
model = Contact
fields = '__all__'
class ProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
class StaffSerializer(serializers.ModelSerializer):
class Meta:
model = Staff
fields = '__all__'
class InfoChainSerializer(serializers.ModelSerializer):
staff = StaffSerializer(many=True)
products = ProductSerializer()
contacts = ContactSerializer()
supplier = ChainSerializer()
# structure = StructureSerializer()
class Meta:
model = InfoChain
fields = '__all__'
class ProductCreateSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = '__all__'
def create(self, validated_data):
product = Product.objects.create(**validated_data)
print(product)
return product.title_product, product.model, product.date
class ChainCreateSerializer(serializers.ModelSerializer):
products = ProductCreateSerializer()
class Meta:
model = InfoChain
fields = ('title', 'structure', 'staff', 'contacts', 'supplier', 'products')
def create(self, validated_data):
chain = InfoChain.objects.create(
**validated_data
)
return chain
Ошибка: ValueError at /create_chain/ Cannot assign "OrderedDict([('title_product', 'asd'), ('model', 'asd'), ('date', datetime.datetime(2023, 1, 6, 0, 59, tzinfo=zoneinfo.ZoneInfo(key='UTC')))])": "InfoChain.products" must be a "Product" instance.