У меня есть несколько моделей, и они вложены друг в друга.Я хочу сделать массовое создание для 2 сериализаторов, оба имеют отношения с другими моделями.Я просмотрел документацию по DRF , но не смог реализовать ее в своем коде.
Я отправляю свои данные json следующим образом:
{
'status':true,
'products':[
{
'painting':{'amount':10},
'product':{'id':12, }
},
{
'painting':{'amount':10},
'product':{'id':12, }
}
],
'customer':{ 'name':'Adnan',
'address':{'country':'Turkey'}
},
'total':111
}
#models.py
class Address():
...
class Customer():
address = models.ForeignKey(Address, ...)
class Painting():
...
class Product():
...
class Selling():
customer = models.ForeignKey(Customer, ...)
products = models.ManyToManyField(Product, through='SellingProduct')
class SellingProduct():
selling = models.ForeignKey(Selling, ...)
product = models.ForeignKey(Product, ...)
painting = models.ForeignKey(Painting, ...)
Вот мойserializers.py
class AddressSerializer():
...
class CustomerSerializer():
address = AddressSerializer()
...
class PaintingSerializer():
...
class ProductSerializer():
...
class SellingProductSerializer():
painting = PaintingSerializer()
product = ProductSerializer()
class SellingSerializer():
customer = CustomerSerializer()
products = SellingProductSerializer(many=True)
...
def create(self, validated_data):
...
Если я напишу это:
class SellingSerializer():
...
def create(self, validated_data):
customer_data = validated_data.pop('customer')
products_data = validated_data.pop('products')
selling = Selling.objects.create(**validated_data) #i didn't pass customer here
for product_data in products_data:
SellingProducts.objects.create(selling=selling, **product_data)
return selling
Я получу эту ошибку:
django.db.utils.IntegrityError: (1048, "Column 'customer_id' cannot be null")
Если я напишу это:
class SellingSerializer():
...
def create(self, validated_data):
selling = Selling.objects.create(**validated_data) #i didn't pass customer here
return selling
Я получаю эту ошибку:
ValueError: Cannot assign "OrderedDict...
..Selling.customer must be a "Customer" instance
- Я не знаю, как извлечь или получить доступ к данным, если их тип - OrderedDict.Как я могу это сделать также?
Я хочу создать запись для Продажи и Продажи продукта, Живописи, и я НЕ хочу создавать записи о клиенте, адресе, продукте в каждом запросе, и я буду использовать существование(в выбранном интерфейсе).
Спасибо всем заранее за любую помощь!