Я создаю UserSerializer
и хочу разрешить пользователям создавать новые учетные записи, но запрещаю им изменять свои имена пользователей. Существует атрибут read_only
, который я могу применить, но тогда пользователи не смогут установить имя пользователя при создании нового. Но без этого это позволяет мне изменить это. Существует также атрибут required
, который, к сожалению, нельзя использовать с read_only. Нет другого соответствующего атрибута.
Одно из решений - создать два разных сериализатора, один для создания пользователя, а другой - для его изменения, но это кажется уродливым и неправильным поступком. Есть ли у вас какие-либо предложения о том, как сделать это без написания 2 сериализаторов?
Спасибо за любой совет.
PS: я использую python3.6 и django2.1
РЕДАКТИРОВАТЬ: я использую generics.{ListCreateAPIView|RetrieveUpdateDestroyAPIView}
классы для представлений. Как это:
class UserList(generics.ListCreateAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
class UserDetails(generics.RetrieveUpdateAPIView):
# this magic means (read only request OR accessing user is the same user being edited OR user is admin)
permission_classes = (perm_or(ReadOnly, perm_or(IsUserOwner, IsAdmin)),)
queryset = User.objects.all()
serializer_class = UserSerializer
РЕДАКТИРОВАТЬ2: Есть дублирующий вопрос (возможно, мой дубликат) здесь