我有一个包含常用属性的项目模型,我有三个不同的子模型FoodItem,ClothesItem和ElectronicItem。
如果我在POST请求中传递ItemType和子模型的必需字段,我想在一次调用中创建两个对象,而不调用具有一对一关系的两个序列化器。我在这个问题上找到了一些问题,但它抱怨创建子模型时缺少item_id。
代码示例:
class Item(models.Model):
ITEMTYPE = (
(1, 'Food'),
(2, 'Clothes'),
(3, 'Electronic')
)
itemType = models.IntegerField(choices=ITEMTYPE)
description = models.CharField(max_length=255,blank=True)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True, null=True)
date_deleted = models.DateTimeField(blank=True, null=True)
price = models.IntegerField()
class FoodItem(models.Model):
item = models.OneToOneField(Item, blank=True)
foodType = models.CharField(max_length=255,blank=True)
calories = models.IntegerField()
答案 0 :(得分:0)
对于序列化程序,您可以通过显式定义字段并使用source
参数指向相关的模型名称来展平数据:例如,source ='food_item.calories'。
至于创建,您需要首先创建Item
实例,然后通过传递序列化程序的validated_data FoodItem
,foodType
来创建calories
提供以前创建的Item
实例。