【发布时间】: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