有条件地选择序列化器

时间:2016-04-16 17:06:42

标签: django django-rest-framework django-rest-framework-gis

我有三个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 个答案:

答案 0 :(得分:2)

您可以覆盖视图中的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