首页 > 解决方案 > 修改抽象模型中字段的 max_length

问题描述

class AbstractBaseField(models.Model):
    choices = models.CharField(_("Choices"), max_length=1000, blank=True)

    class Meta:
        abstract = True

class TicketField(AbstractBaseField):
    pass

TicketField._meta.get_field("choices").max_length = 5000

我正在尝试修改继承自抽象模型max_length的字段上的属性。TicketField如您所见,我已经对模型定义的字段进行了猴子修补,并且按预期生成了迁移。该字段已max_length正确应用,我可以通过外壳很好地设置该值,但管理员验证失败,好像旧max_length的仍然存在,显示错误Ensure this value has at most 1000 characters (it has XXXX)

max_length在运行时检查了 ModelForm 和 Validator 值,它们都使用 new max_length,但不知何故仍然会引发验证错误。

(Pdb) self.fields["choices"].max_length
5000
(Pdb) self.fields["choices"].validators[0]._constructor_args
((5000,), {})
(Pdb) self.fields["choices"].widget.attrs
{u'class': u'vTextField', u'maxlength': '5000'}

标签: pythondjango

解决方案


推荐阅读