2016-10-01 114 views
1

我正在處理優惠券/優惠券銷售網站。我有以下模型,(不包括額外的細節)。django rest框架中的反向嵌套關係序列化

class Order(models.Model): 

     email = models.EmailField(max_length=200, null=False) 
     phone_number = models.CharField(max_length=10, null=False) 
     shipping_address = models.TextField(blank=True,null=True) 
     coupon_code = models.CharField(max_length=20,null=True,blank=True) 
     gross_total = models.FloatField(default=0.0) 

     class Meta: 
      db_table = 'order' 


    class OrderDetail(models.Model): 
     order = models.ForeignKey(Order,related_name='order_details') 
     package = models.ForeignKey(Package) 
     quantity = models.IntegerField(null=False) 
     unit_price = models.FloatField(default=0.0) 

     class Meta: 
      db_table = 'order_detail' 




    class Coupon(models.Model): 
     order_detail = models.ForeignKey(OrderDetail,related_name='coupons') 
     code = models.CharField(max_length=200, null=False, unique=True) 
     maximum_usage_count = models.IntegerField(null=False) 
     used_count = models.IntegerField(default=0) 
     valid_from = models.DateTimeField(null=False) 
     valid_to = models.DateTimeField(null=False) 

     class Meta: 
      db_table = 'coupon' 

我對這些串行器,

class CouponSerializer(serializers.Serializer): 
     class Meta: 
      model = Coupon 
      fields = ['id', 'code', 'maximum_usage_count', 'used_count', 'valid_from', 'valid_to', 'created_at', 
         'updated_at', 'is_active'] 


    class OrderDetailSerializer(serializers.Serializer): 
     coupons = CouponSerializer(read_only=True) 

     class Meta: 
      model = OrderDetail 
      fields = ['id', 'package', 'quantity', 'unit_price', 'created_at', 'updated_at', 'is_active'] 


    class OrderSerializer(serializers.ModelSerializer): 
     order_details = OrderDetailSerializer(read_only=True,many=True) 

     class Meta: 
      model = Order 
      fields = ['id','email', 'phone_number', 'shipping_address', 'coupon_code', 'gross_total','order_details'] 

在我listapiview,包括獲取所有的訂單,我指定的順序串行器。 api工作正常,但無法序列化反向關係船模型。我得到以下回應。

{ 
      "id": 31, 
      "email": "[email protected]", 
      "first_name": "ff", 
      "last_name": "ff", 
      "phone_number": "ff", 
      "shipping_address": "", 
      "coupon_code": "", 
      "gross_total": 1.0, 
      "payment_method": "ONLINE", 
      "order_status": "PLACED", 
      "created_at": "2016-10-01T17:26:00.432000", 
      "updated_at": "2016-10-01T17:48:50.797000", 
      "is_active": true, 
      "order_details": [ 
       { 
        "coupons": {} 
       }, 
       { 
        "coupons": {} 
       }, 
       { 
        "coupons": {} 
       } 
      ] 
     } 

回答

0

我想你應該在CouponSerializerserializers.ModelSerializerOrderDetailSerializer,而不是僅僅serializer.Serializer替換繼承的類 - 就像你在OrderSerializer一樣。

之後,您會收到一些錯誤,因爲您的模型(優惠券和OrderDetail)不聲明任何created_at,updated_atis_active字段。因此,您應該將這些字段添加到您的模型中,或者從兩個序列化程序類中的Meta的列表中刪除它們。但在此之後,它按預期工作。

相關問題