2

私は3つのDjangoモデルを持っています。条件付きでシリアライザを選択

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


class Place(Asset): 
    location = PointField() 


class Zone(Asset): 
    location = PolygonField() 

プレイスとゾーンに同じエンドポイントを使用したいと思います。 シリアライザをどのように使用するかを各リクエストごとに決定することは可能ですか?リクエストされたアセットが場所かゾーンかどうかを簡単に確認できますか?

私は単一のインスタンスを処理する際の唯一の興味を持っていますので、リストビューなど処理する

答えて

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