Django Rest Framework: Disable field update after object is created

后端 未结 11 1419
独厮守ぢ
独厮守ぢ 2020-11-30 20:15

I\'m trying to make my User model RESTful via Django Rest Framework API calls, so that I can create users as well as update their profiles.

However, as I go through

11条回答
  •  刺人心
    刺人心 (楼主)
    2020-11-30 20:47

    More universal way to "Disable field update after object is created" - adjust read_only_fields per View.action

    1) add method to Serializer (better to use your own base cls)

    def get_extra_kwargs(self):
        extra_kwargs = super(BasePerTeamSerializer, self).get_extra_kwargs()
        action = self.context['view'].action
        actions_readonly_fields = getattr(self.Meta, 'actions_readonly_fields', None)
        if actions_readonly_fields:
            for actions, fields in actions_readonly_fields.items():
                if action in actions:
                    for field in fields:
                        if extra_kwargs.get(field):
                            extra_kwargs[field]['read_only'] = True
                        else:
                            extra_kwargs[field] = {'read_only': True}
        return extra_kwargs
    

    2) Add to Meta of serializer dict named actions_readonly_fields

    class Meta:
        model = YourModel
        fields = '__all__'
        actions_readonly_fields = {
            ('update', 'partial_update'): ('client', )
        }
    

    In the example above client field will become read-only for actions: 'update', 'partial_update' (ie for PUT, PATCH methods)

提交回复
热议问题