django:尝试组织clean_data函数和验证器。每件事情都去哪了?

时间:2018-01-29 11:30:19

标签: django django-validation

我正在尝试找到以正确方式组织代码段的方法,但我对这一切感到困惑:

我有models.py,我已声明(显示部分字段)此

class Posts(models.Model):
       image = models.ImageField(upload_to=user_directory_path, null=True, blank = True)

然后我想清理那个字段,以防万一有人想在表单页面中搞笑。

所以我去了forms.py并创建了一个自定义方法来清理它

class PostsForm(ModelForm):
    class Meta:
        model = Posts
        fields = ['image' , 'otherfields']

        def clean_image(self):
            image = self.cleaned_data['image']

好的,清理它,但我需要更多,比如确保他们不上传文件太大。所以我想我可以在模板/验证器中创建一个目录 创建一个像validators.py这样的文件,我编写验证函数,然后我可以导入该函数。

因此。 validators.py

from django.core.exceptions import  ValidationError

def file_size(value):
    limit = 2 * 100 * 100
    if value.size > limit:
        raise ValidationError('File too large. Should be less than 200 Kbs')

所以,当我在forms.py中时,我想导入该文件validators.py,就像这样

from myaapp.validators import file_size

但是它告诉我它并不知道这个" file_size" (pycharm中未解决的引用)

简而言之,我完全不知道如何组织这三件事。

1 个答案:

答案 0 :(得分:0)

这里的案例可能是PyCharm,无法识别该文件。为什么不将文件移动到models.py和forms.py所在的目录中。然后你可以通过

访问它
from myapp.validators import file_size

同样在使用自定义验证器时,您应该提供在模型和表单类中使用的验证器。

# models.py
from myapp.validators import file_size


class Posts(models.Model):
   image = models.ImageField(validators=[file_size])

#forms.py
from myapp.validators import file_size


class PostsForm(ModelForm):
    image = forms.imageField(validators=[file_size])
    class Meta:
        model = Posts
        fields = ['image' , 'otherfields']

        def clean_image(self):
            image = self.cleaned_data['image']

参考Writing Validators

如果您没有在多种情况下使用验证器,只需一次。最好在表单类本身中提供验证。