django-rest-framework的不可变所有权(外键)

时间:2014-01-28 03:35:19

标签: django rest serialization django-rest-framework

如何处理不可变所有权,例如:

  

一旦用户创建类似{headline: 'test', owner: [user_id], body: 'test'}之类的对象,但在此之后,__update__上只有正文字段可变。

波纹管是一些解决方案,我不确定哪个更好:

  1. view_set
  2. 中的创建更新上使用不同的序列化工具
  3. get_serlializer_class上使用不同的序列化程序,具体取决于request.method
  4. 使用权限处理它,例如IsOwnerOrReadOnly,但没有字段permission
  5. 谢谢。

1 个答案:

答案 0 :(得分:1)

get_serializer似乎是一个完美的地方,您可以访问请求和序列化程序:

class MyAwesomeViewSet(viewsets.ModelViewSet):
    # my attributes

    def get_serializer(self, instance=None, data=None,
                   files=None, many=False, partial=False):
        s = super(MyAwesomeViewSet, self).get_serializer(instance, data, files, many, partial)
        if self.request.method == 'PUT':
            s.fields['headline'].read_only = True
            s.fields['owner'].read_only = True

        return s

如果您发布只读数据,这不会给您带来任何错误,但它实际上不会更新数据库。