【问题标题】:Conditionally choose serializer有条件地选择序列化器
【发布时间】:2016-08-08 14:33:21
【问题描述】:

我有三个 Django 模型。

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


class Place(Asset):
  location = PointField()


class Zone(Asset):
  location = PolygonField()

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

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

【问题讨论】:

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


    【解决方案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 
    

    【讨论】:

    • 感谢您的回答。
    猜你喜欢
    • 2012-10-24
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2020-12-02
    • 2017-07-25
    • 2016-03-23
    相关资源
    最近更新 更多