我有三个Django模型。
class Asset(models.Model):
name = models.CharField(max_length=255)
class Place(Asset):
location = PointField()
class Zone(Asset):
location = PolygonField()
我想为Place和Zone使用相同的端点。 是否可以为每个请求决定使用哪个序列化器,例如我可以轻松检查所请求的资产是地点还是区域?
我只对处理单个实例感兴趣,因此不需要处理ListView等。
答案 0 :(得分:2)
您可以覆盖视图中的get_serializer_class
方法,并添加用于在那里确定正确序列化程序的逻辑。
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