我在Django管理员中遇到了一个非常奇怪的行为。我有这个模型定义:
class WebPublication(DatesInfo):
title = models.CharField(max_length=200)
class Meta:
abstract = True
class WebArticle(MsnPublication):
pass
以下表格和管理员代码:
class WebArticleForm(forms.ModelForm):
title = forms.CharField(max_length=150)
class WebPublicationAdmin(admin.ModelAdmin):
def some_method(self, obj):
return 'Hello!'
class WebArticleAdmin(WebPublicationAdmin):
form = MsnArticleForm
list_display = ('title', 'author', 'pub_date', 'preview_link')
admin.site.register(MsnArticle, MsnArticleAdmin)
这是非常标准的,这就是为什么我说我发现这很奇怪并尽量提供尽可能多的细节。
正如您所看到的,WebPublication
有一个varchar
,最大长度为200,可以在表格描述中确认(顺便提一下PostgreSQL):
Column | Type | Modifiers
-------------------+--------------------------+-------------------
title | character varying(200) | not null
但是,当我尝试编辑title
字段时,我从Django admin获得以下异常。我将它设为150个字符,这是输入字段根据WebPublicationAdmin
的定义所允许的最大值(预期值)。
DataError: value too long for type character varying(150)
请注意错误消息如何反映模型的当前状态。 (我进行了一次迁移,但它很成功,因为PostgreSQL这么说。)
这里可能出现什么问题?
答案 0 :(得分:0)
你的问题是你在这里用150覆盖了标题的max_length;
class WebArticleForm(forms.ModelForm):
title = forms.CharField(max_length=150)
管理员正在使用此表单来验证数据。只需更改150 - > 200。
答案 1 :(得分:0)
事实证明,错误来自不同的字段。错误不是描述性的,也不会告诉哪个字段违反了长度约束。如果有人遇到同样的问题,请尝试检查模型的所有字段。