在一个Serializer中创建具有子模型的模型

时间:2015-12-23 03:43:48

标签: python django django-rest-framework

我有一个包含常用属性的项目模型,我有三个不同的子模型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()

1 个答案:

答案 0 :(得分:0)

对于序列化程序,您可以通过显式定义字段并使用source参数指向相关的模型名称来展平数据:例如,source ='food_item.calories'。

至于创建,您需要首先创建Item实例,然后通过传递序列化程序的validated_data FoodItemfoodType 来创建calories 提供以前创建的Item实例。