Python Modelviewset中的验证

Python Modelviewset中的验证,python,django,django-rest-framework,Python,Django,Django Rest Framework,我必须验证图像。我已经尝试将验证器添加到models.py中的字段,但python无法根据类迁移验证器。在这种情况下,如何在views.py中添加验证 验证器.py class ValidateImageSize: MEASURE_UNIT_BYTE_MAP = { 'kb': 1024, 'mb': 1024 * 1024, } MEASURE_UNIT_NAME_MAP = { 'kb': 'kilobyte',

我必须验证图像。我已经尝试将验证器添加到models.py中的字段,但python无法根据类迁移验证器。在这种情况下,如何在views.py中添加验证

验证器.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)

首先,我们将验证所有图像的大小/格式是否正确,如果没有错误,我们将执行创建操作

从.validators导入ValidateImageSize 类EpiodeViewSet.ModelViewSet: def createself,request,story_id=None,*args,**kwargs: 尝试: story=story.objects.getpk=story\u id 除了Story.DoesNotExist: 养不到 现在我们将运行图像验证 custom_image_validator=根据您的设计大小验证图像大小 对于dictrequest.data.List['images']中的图像: 自定义\u映像\u验证映像如果发生任何验证错误,将引发验证错误 在那之后我们将做我们的日常工作 kwargs={ “故事”:故事, 'title':请求.数据.获取'title', “cover”:请求.数据.获取“cover”, } 插曲=插曲.对象.创建**kwargs 对于dictrequest.data.List['images']中的图像: eposodeimage.objects.createSpidence=Spidence,image=image 返回响应{'eposition\u id':eposition.id},状态=201
你为什么不使用字母连接器?您可以在那里进行验证。python不能根据类迁移验证程序是什么意思?如果添加_eq_________方法和解构方法,在大多数情况下@deconstructible decorator都可以工作,它将是可序列化的,因此可以迁移。例如,请参见@dirkgroten,如果我将validator添加到模型的字段中,当我尝试进行迁移时,它会带来错误:有一些值Django无法序列化到迁移文件中并引用类validateimagesize@Alex我有两个模型,其中一个引用了另一个,并提供了添加多个图像的功能。要实现这一点,我必须在没有serializer@DanabekDuisekov:如果验证器是类,则需要使其可序列化,这是正确的。但这很容易做到,明白吗。如果你不明白,请显示validator类,然后我们可以提供帮助。@Danabek Duisekov请先用你想要的大小初始化自定义\u image\u验证器。它适用于图像,我如何在这里为封面字段添加验证?最好是使用Epiodeserializer来验证。还有一个问题,它像keyarror一样返回。。。。,在这种情况下,如何在json中返回验证错误为什么不引发serializers.ValidationError