пропускал недопустимое значение role (на выбор три значения)
def perform_update(self, serializer):
user = get_object_or_404(CustomUser, username=self.kwargs.get('username'))
role = self.request.data.get('role') or user.role
serializer.is_valid(raise_exception=True)
serializer.save(role=role)
в сериализаторе поле role задаю так
role = serializers.ChoiceField(default='user', choices=ROLES, read_only=True, required=False)
но при сохранении записи с неверной ролью все проходит. как исправить чтоб не проходило?
А что is_valid выводит?
это если данные валидны вроде
ничего. возможно дело в том что сериализатор не проверяет поле role т.к. оно read_only а сразу сохраняет его. как можно в def perform_update закинуть в сериализатор поле role на проверку?
эм, ну ты сам достаешь роль из пришедших данных и сам ее прокидываешь в save сериализатора
а как сделать чтоб сериализатор не пропускал не корректное значение? в данном случае
ну пропускать поле через сериализатор, а не прокидывать его сразу в save, там оно просто считается провалидированным значением
в функции perform_update(self, serializer) как это сделать не переопределяя serializer? или выход только к примеру такой serializer=CustomUserSerializer(data=self.request.data)
А почему ты используешь перформ апдейт?
мне показалось что более удобно на этом этапе переопределить данные при сохрании patch методом. или как лучше сделать?
В апдейт нормально сделать, с флагом partial=True, если это патч
Насколько я помню,перформ в основном нужен как раз когда нужно что-то докинуть в сейв, минуя валидацию
не могу понять как на уровне модели или сериализатора сделать поле role c выбором и проверкой. в модели role = models.CharField(choices=ROLES, default='user', max_length=10) в сериализаторе либо не менять либо role = serializers.ChoiceField(default='user', choices=ROLES, required=False) во вьюхе не переопределяю сохранение этого поля. и оно не сохраняется. только дефолтное
Обсуждают сегодня