在Django-Rest中,无法序列化具有一个omany映射的对象

2024-04-25 03:43:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django Rest框架的初学者。我想实现一对多对象映射,如下面的json架构:

{
  "from_date": "2017-08-06T12:30",
  "to_date": "2017-08-06T12:30",
  "coupon_name": "WELCOME100",
  "min_booking_value": 150,
  "applicable_days": [
    {
      "from_time": "13:00",
      "to_time": "15:00",
      "applicable_day": 2
    },
    {
      "from_time": "16:00",
      "to_time": "18:00",
      "applicable_day": 3
    }
  ]
}

Django为上面的json模式创建了以下类:

^{pr2}$

以及下面的序列化程序类:

class CouponApplicableDaysSerializer(serializers.ModelSerializer):
    class Meta:
        model = CouponApplicableDays
        fields = ('from_time', 'to_time', 'applicable_day')


class CouponSerializer(serializers.ModelSerializer):
    coupon_applicable_days = CouponApplicableDaysSerializer(required=True, many=True)

    class Meta:
        model = Coupon
        fields = ('coupon_id', 'from_date', 'to_date', 'coupon_name', 'min_booking_value', 'coupon_applicable_days',)

    def create(self, validated_data):
        coupon_applicable_days_data = validated_data.pop("coupon_applicable_days")
        coupon = Coupon.objects.create(**validated_data)
        CouponApplicableDays.objects.create(coupon=coupon, **coupon_applicable_days_data)
        return coupon

当我用优惠券序列化程序保存数据时。它只保存在优惠券表中,而不是在CouponApplicableDays中。在

我知道,我在某个地方搞砸了,但我不知道在哪里。你们能看看上面的代码,告诉我怎么解决这个问题吗?在


Tags: todjangofromjsondatadatetimecreate
1条回答
网友
1楼 · 发布于 2024-04-25 03:43:47

这里有一个列表 coupon_applicable_days_data = validated_data.pop("coupon_applicable_days")

迭代列表并创建对象,如下所示:

for applicable_day in coupon_applicable_days_data: 
    CouponApplicableDays.objects.create(coupon=coupon, **applicable_day) 

或者使用bulk_create方法 https://docs.djangoproject.com/en/1.11/ref/models/querysets/#bulk-create

^{pr2}$

请注意,bulk_create不会触发pre_save/post_save信号。在

相关问题 更多 >