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

django: trying to organize clean_data functions, and validators. Where does each thing go?

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

我有 models.py 声明(显示部分字段)this

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']

好的,它已经清理干净了,但我还需要更多,比如确保他们上传的文件不会太大。所以我想我可以在 templates/validators 中创建一个目录,然后 创建一个像 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 中未解决的参考)

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

这里的情况可能是PyCharm,无法识别文件。为什么不将文件移动到与 models.py 和 forms.py 相同的目录中?然后你可以通过

访问它
from myapp.validators import file_size

此外,在使用自定义验证器时,您应该提供要在模型和表单中使用的验证器 classes。

# 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.

如果您不在多个场景中使用验证器,只需一次。最好以 class 形式本身提供验证。