2016-03-03 65 views
0

我有一個串行:Django的RestFramework如何讓外地允許後,但現在允許把

class AreaSerializer(serializers.ModelSerializer): 
    x_axis = serializers.FloatField() 
    y_axis = serializers.FloatField() 
    map_id = serializers.IntegerField(source='area_map_id') 

而且我有一個ListCreateAPIViewRetrieveUpdateDestroyAPIView使用它
但我想現場map_id可以讓POST方法,不允許PUT方法

我的意思是,如果POST下面的數據是OK

{ 
"x_axis":1, 
"y_axis":2, 
"map_id":1 
} 

如果PUT下面的數據仍然是OK

{ 
"x_axis":1, 
"y_axis":2, 
"map_id":1 
} 

map_id不會有影響數據庫
如果數據庫保存與MAP_ID = 2,它仍將2,它不會被編輯到1

+0

您是否解決了您的問題? –

回答

1

您可以創建另一個序列化程序AreaPutSerializer,它將繼承AreaSerializer以處理PUT請求。

AreaPutSerializer中,我們將使用extra_kwargs選項將map_id字段設置爲read_only選項。這樣做將確保在PUT請求中,map_id字段將包含在API輸出中,但不用於寫入操作。

class AreaSerializer(serializers.ModelSerializer): 
    x_axis = serializers.FloatField() 
    y_axis = serializers.FloatField() 
    map_id = serializers.IntegerField(source='area_map_id') 

class AreaPutSerializer(AreaSerializer): 

    class Meta(AreaSerializer.Meta): 
     extra_kwargs = {'map_id': {'read_only':True}} 

在你看來,你可以添加一個get_serializer_class方法將返回取決於請求方法中使用的序列化器類。

def get_serializer_class(self): 
    if self.request.method == 'PUT': 
     return AreaPutSerializer 
    return AreaSerializer