4

我有三个 Django 模型。

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


class Place(Asset):
  location = PointField()


class Zone(Asset):
  location = PolygonField()

我想对 Place 和 Zone 使用相同的端点。是否可以为每个请求决定将使用哪个序列化程序,例如我可以轻松检查请求的资产是地方还是区域?

我只对处理单个实例感兴趣,因此不需要处理 ListView 等。

4

1 回答 1

5

您可以在视图中覆盖该get_serializer_class方法并添加用于确定正确序列化程序的逻辑。

根据DRF 文档:

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 
于 2016-04-16T17:17:28.713 回答