我正在尝试找到以正确方式组织代码段的方法,但我对这一切感到困惑:
我有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中未解决的引用)
简而言之,我完全不知道如何组织这三件事。
答案 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']
如果您没有在多种情况下使用验证器,只需一次。最好在表单类本身中提供验证。