2

我有三個Django模型。有條件地選擇串行器

class Asset(models.Model): 
    name = models.CharField(max_length=255) 


class Place(Asset): 
    location = PointField() 


class Zone(Asset): 
    location = PolygonField() 

我想爲Place和Zone使用相同的端點。 是否有可能爲每個請求決定使用哪個序列化器,例如我可以輕鬆檢查所請求的資產是地點還是區域?

我只是在處理一個單一實例興趣,因此沒有必要處理的ListView等

回答

1

可以覆蓋get_serializer_class方法在您的視圖,並添加用於決定有正確的串行器。

由於每DRF docs:

get_serializer_class(self)

返回應當用於串行類。默認爲 ,返回serializer_class屬性。

可能會被覆蓋以提供動態行爲,例如使用不同的 串行器進行讀取和寫入操作,或向不同類型的用戶提供不同的 串行器。

代碼:

class MyView(..): 
    ... 

    def get_serializer_class(self): 
     if asset == place: # here add the logic to decide the asset type 
      return PlaceSerializer 
     return ZoneSerializer 
+0

感謝這個答案。 – Helgi