2015-01-14 27 views
0

我的基於類的視圖看起來像這樣。 「Get」用於列出所有預訂,「Post」用於創建新預訂。Django Rest Framework v3.0:如何在保存對象時將自定義序列化器字段映射到模型字段?

class BookingList(APIView): 
    def get(self, request, format=None): 
     bookings = Booking.objects.all() 
     paginator = Paginator(bookings, 10) 
     page = paginator.page(1) 
     serializer = BookingSerializer(page.object_list, many=True) 
     return Response(serializer.data) 

    def post(self, request, format=None): 
     serializer = BookingSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
      return Response(serializer.data, status=status.HTTP_201_CREATED) 
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

而我的串行器類看起來像這樣。

class BookingSerializer(serializers.HyperlinkedModelSerializer): 
    field1 = serializers.SerializerMethodField('get_alternate_var1') 
    field2 = serializers.SerializerMethodField('get_alternate_var2') 

    class Meta: 
     model = Booking 
     fields = ('field1', 'field2','var3','var4') 

    def get_alternate_field1(self, obj): 
     return obj.var1 

    def get_alternate_field2(self,obj): 
     return obj.var2 

class Booking(models.Model): 
    var1 = models.CharField(max_length=200) 
    var2 = models.CharField(max_length=200) 
    var3 = models.CharField(max_length=200) 
    var4 = models.CharField(max_length=200) 
    .... 

現在,這與GET方法完美無缺。如何使用POST創建一個新對象? 我的後params是field1,field2,var3,我必須在保存之前將默認值(uuid)添加到var4。我無法將field1,field2映射到Model的var1和var2。我該如何解決這個問題?

回答

0

調用serializer.save()應該創建一個新的實例。從文檔

調用.save()將要麼創建一個新的實例,或更新現有 例如,取決於如果實例序列化類時,現有的實例傳遞 :

我會在帖子上更改您的參數名稱以匹配您的模型。或者在文章中手動更改數據字典,以便這些變量在將它們交給您的序列化程序之前存在。

相關問題