【问题标题】:Django forms inheritance doesn't read value from fieldDjango 表单继承不会从字段中读取值
【发布时间】:2021-09-06 13:47:30
【问题描述】:

我有 2 个相似的表单,所以我决定从另一个表单继承一个表单,它看起来像:

class EditModuleForm(forms.Form):
    category_name = forms.CharField(label='Name', max_length=100)
    image = forms.ImageField(label='Icon', required=False)

    def clean_image(self):
        image = self.cleaned_data.get('image', None)
        if image:
            check_image_size(image)


class NewCategoryForm(EditModuleForm):
    category_slug = forms.CharField(label="Slug", max_length=10)
    field_order = ['category_name', 'category_slug', 'image']

    def clean_image(self):
        super(NewCategoryForm, self).clean_image()

在使用NewCategoryForm 期间,图像未经过验证,值为无。看起来此表单无法从图像字段中获取值。有人可以提示我做错了什么吗?

【问题讨论】:

  • 你的check_image_size函数返回或做什么?
  • @AbdulAzizBarkat 如果图像尺寸太大,它会引发 ValidationError

标签: python django django-forms


【解决方案1】:

您不会从clean_image 方法返回已清理的数据,clean_<field> 方法允许我们更改字段的数据,因此我们必须从该方法返回数据。此外,您不需要覆盖子类中的方法:

class EditModuleForm(forms.Form):
    category_name = forms.CharField(label='Name', max_length=100)
    image = forms.ImageField(label='Icon', required=False)

    def clean_image(self):
        image = self.cleaned_data.get('image', None)
        if image:
            check_image_size(image)
        return image


class NewCategoryForm(EditModuleForm):
    category_slug = forms.CharField(label="Slug", max_length=10)
    field_order = ['category_name', 'category_slug', 'image']

【讨论】:

  • 问题是如果我在提交 NewCategoryForm 时在 clean_image 方法中打印 image,这个值是空的,就像 self.cleaned_data.get.... 返回 None 一样
  • @Frendom 您是否在表单标签(在模板中)上设置了enctype='multipart/form-data'
  • 是的,在我重新编码我的表单之前它正在工作,是的,enctype 已设置
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 2021-10-26
  • 1970-01-01
  • 2017-11-25
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
相关资源
最近更新 更多