Строка нулевой длины в запросе исправления возвращает статус 200 несмотря на проверку - PullRequest
0 голосов
/ 21 сентября 2018

Ранее я проверял ввод моей модели в сериализаторе, но мне пришлось перейти к проверке в модели, используя унаследованные свойства от AbstractUser.

На мой взгляд, в настоящее время у меня есть следующее:

class SetUserProfileView(generics.UpdateAPIView):
    """
    Use this endpoint to change user profile.
    """
    serializer_class = settings.SERIALIZERS.user_update_profile
    permission_classes = [permissions.IsAuthenticated]

    def get_object(self):
        return self.request.user

    def patch(self, request):
        testmodel = self.get_object()
        serializer = self.serializer_class(testmodel, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(data=serializer.data, status=status.HTTP_200_OK)
        return Response(data=serializer._errors, status=status.HTTP_400_BAD_REQUEST)

но это возвращает статус 200 и не обновляет поле роли, если я отправляю строку нулевой длины для роли

Это несмотря на то, что в роли есть ограниченияв models.py, что поле должно быть в ROLE_CHOICES

Как мне обновить мое представление, чтобы убедиться, что данные в модели правильные с использованием проверки в модели?Я не могу найти упоминания о

Модель:

class SeaUser(AbstractUser):
    ...
    SARGENT_PEPPER = 'SGT'
    COLENAL_MUSTARD = 'COL'
    OTHER = 'OTH'
    ROLE_CHOICES = (
        (SARGENT_PEPPER, _('sargent')),
        (COLENAL_MUSTARD, _('colenal')),
        (OTHER, _('Other')),
    )
    role = models.CharField(_('Role'), max_length=3, choices=ROLE_CHOICES, default=CREW)

role должно быть одним из 3 значений.Я проверяю это с помощью следующего:

def test_update_user_no_role(self):
    payload = {"first_name": "foo",
        "last_name": "bar",
        "role": "",
        "preferred_timezone": "UTC"
    }
    response = self.request_update_user(payload)
    modified_user = self.user_model.objects.get(username=self.user_details['username'])

    print('mofified role: ', modified_user.role)

    self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
    self.assertEqual(self.user.role, modified_user.role)

сериализатор:

class SeaUserCreateSerializer(UserCreateSerializer):
    class Meta:
        model = User
        fields = ('id',...,'role', 'gdpr',..)

    def validate_gdpr(self, value):
        if not validate_user_gdpr(value):
            raise serializers.ValidationError("GDPR must be accepted.")
        return value

view:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...