Python 向Django模型添加验证

Python 向Django模型添加验证,python,django,validation,django-rest-framework,Python,Django,Validation,Django Rest Framework,我正在为一个应用程序使用django rest框架。以下是功能模型: class Feature(models.Model): image_component = models.ForeignKey('Image_Component',on_delete=models.CASCADE,) feature_type = models.CharField(max_length = 20 ) feature_value = models.CharField(max_length

我正在为一个应用程序使用django rest框架。以下是功能模型:

class Feature(models.Model):
    image_component = models.ForeignKey('Image_Component',on_delete=models.CASCADE,)
    feature_type = models.CharField(max_length = 20 )
    feature_value = models.CharField(max_length = 30)


    def save(self , *args , **kwargs):
        if not self.feature_type in ['size','quality','format']:
            raise Exception("Incorrect")
        else:
            super(Feature, self).save(*args , **kwargs)

    def validate(self , data):
        if data['feature_type'] == 'size':
            print self.feature_value.is_alnum()
            if not data['feature_value'].is_alnum():
                raise serializers.ValidationError('Incorrect value')
        return data
要素模型的序列化程序类为:

class FeatureSerializer(serializers.ModelSerializer):
    class Meta:
        model = Feature
        field = ('id','feature_value')
以下是相应的视图:

class Feature(generics.ListCreateAPIView):
    queryset = Feature.objects.all()
    serializer_class = FeatureSerializer
我想验证模型,以便如果任何用户输入特征值的值作为大小,则他/她只能以“200x200”的形式输入(如果不是,则为字母数字)。我尝试在功能模型中的验证功能中执行此操作,但不起作用。有人能告诉我如何更正此错误吗


此外,validate方法中的print语句不会打印任何内容,这意味着validate方法根本没有按照文档中所述调用。

代码未测试。在CharField方法中使用参数验证器

def validate_feature_type(self , data):
        if data['feature_type'] == 'size':
            print self.feature_value.is_alnum()
            if not data['feature_value'].is_alnum():
                raise serializers.ValidationError('Incorrect value')

class Feature(models.Model):
    image_component = models.ForeignKey('Image_Component', on_delete=models.CASCADE,)
    feature_type = models.CharField(max_length = 2, validators=[validate_feature_type] )
    feature_value = models.CharField(max_length = 30)

未测试的代码。在CharField方法中使用参数验证器

def validate_feature_type(self , data):
        if data['feature_type'] == 'size':
            print self.feature_value.is_alnum()
            if not data['feature_value'].is_alnum():
                raise serializers.ValidationError('Incorrect value')

class Feature(models.Model):
    image_component = models.ForeignKey('Image_Component', on_delete=models.CASCADE,)
    feature_type = models.CharField(max_length = 2, validators=[validate_feature_type] )
    feature_value = models.CharField(max_length = 30)

使用
clean
而不是
validate
,对于
feature\u value
字段验证,相应的方法应该是
def clean\u feature\u value(self):
@AvinashRaj仍然不工作显示您当前的尝试。def clean\u feature\u value(self):if self.feature\u type=='size':打印self.feature\u value.is\u alnum()if not self.feature\u value.is\u alnum():引发序列化程序。验证错误('error value')
if self.cleaned\u data['feature\u type']='size':
,请参阅使用
clean
而不是
验证
,对于
feature\u value
字段验证,相应的方法应该是
def clean\u feature\u value(self):
@AvinashRaj仍然不工作显示您当前的尝试。def clean\u feature\u value(self):如果self.feature\u type='size':打印self.feature\u value.is\u alnum()如果不是self.feature\u value.is\u alnum():引发序列化程序。验证错误('error value')
如果自清理的\u数据['feature\u type']=='size':
,请参阅