【问题标题】:Add validations to Django model向 Django 模型添加验证
【发布时间】:2016-02-23 15:03:52
【问题描述】:

我正在为一个应用程序使用 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

我想验证模型,如果任何用户将 feature_value 的值输入为 size,那么他/她只能以“200x200”的形式输入"(如果不是,则为字母数字)。我尝试在 Feature 模型中的 validate 函数中执行此操作,但它不起作用。有人可以告诉我如何纠正此错误。

验证方法中的打印语句也不打印任何内容,这意味着验证方法根本没有像文档中所说的那样被调用。

【问题讨论】:

  • 使用clean而不是validate,用于feature_value字段验证,对应的方法应该是def clean_feature_value(self):
  • @AvinashRaj 仍然无法正常工作
  • 显示你当前的尝试。
  • def clean_feature_value(self): if self.feature_type == 'size': print self.feature_value.is_alnum() if not self.feature_value.is_alnum(): raise serializers.ValidationError('Incorrect value ')
  • if self.cleaned_data['feature_type'] == 'size':,见docs.djangoproject.com/en/1.9/ref/forms/validation/…

标签: python django validation django-rest-framework


【解决方案1】:

代码未经测试。在 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)

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 2011-11-14
    • 2019-07-03
    • 2016-08-31
    • 1970-01-01
    • 2021-10-05
    • 1970-01-01
    • 2017-08-16
    • 2016-09-05
    相关资源
    最近更新 更多