Проверка в ModelViewset - PullRequest
       4

Проверка в ModelViewset

0 голосов
/ 01 октября 2019

Я должен проверить изображение. Я попытался добавить валидатор в поле в models.py, но Python не может migrate валидатор в зависимости от класса. Как добавить проверку в этом случае в views.py

validators.py

class ValidateImageSize:
    MEASURE_UNIT_BYTE_MAP = {
        'kb': 1024,
        'mb': 1024 * 1024,
    }
    MEASURE_UNIT_NAME_MAP = {
        'kb': 'kilobyte',
        'mb': 'megabyte',
    }

    def __init__(self, max_size):
        max_size, measure_unit = max_size.split(' ')
        self.max_size = int(max_size)
        self.measure_unit = measure_unit

    def __call__(self, value):
        if value.size > self.max_size * self.MEASURE_UNIT_BYTE_MAP[self.measure_unit]:
            raise ValidationError(f'Size maximum is {self.max_size} {self.measure_unit}')

views.py

class EpisodeView(viewsets.ModelViewSet):
    def create(self, request, story_id=None, *args, **kwargs):
        try:
            story = Story.objects.get(pk=story_id)
        except Story.DoesNotExist:
            raise NotFound

        kwargs = {
            'story': story,
            'title': request.data.get('title'),
            'cover': request.data.get('cover'),
        }

        episode = Episode.objects.create(**kwargs)

        for image in dict(request.data.lists())['images']:
            EpisodeImage.objects.create(episode=episode, image=image)

        return Response({'episode_id': episode.id}, status=201)

1 Ответ

1 голос
/ 01 октября 2019

Сначала мы собираемся проверить, все ли изображения правильно отформатированы / отформатированы или нет, и если ошибок нет, мы выполним операцию создания.

from .validators import  ValidateImageSize

class EpisodeView(viewsets.ModelViewSet):
    def create(self, request, story_id=None, *args, **kwargs):
        try:
            story = Story.objects.get(pk=story_id)
        except Story.DoesNotExist:
            raise NotFound
        # now we will run image validation 
        custom_image_validator = ValidateImageSize() # with your desize size
        for image in dict(request.data.lists())['images']:
            custom_image_validator(image) # this will raise validation error if any validation error occur 

        # After that will do our regular work

        kwargs = {
            'story': story,
            'title': request.data.get('title'),
            'cover': request.data.get('cover'),
        }

        episode = Episode.objects.create(**kwargs)

        for image in dict(request.data.lists())['images']:
            EpisodeImage.objects.create(episode=episode, image=image)

        return Response({'episode_id': episode.id}, status=201)

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