Django Admin DataError:类型字符变化的值太长(150)

时间:2015-04-22 02:20:48

标签: django postgresql django-models django-forms django-admin

我在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这么说。)

这里可能出现什么问题?

2 个答案:

答案 0 :(得分:0)

你的问题是你在这里用150覆盖了标题的max_length;

class WebArticleForm(forms.ModelForm):
    title = forms.CharField(max_length=150)

管理员正在使用此表单来验证数据。只需更改150 - > 200。

答案 1 :(得分:0)

事实证明,错误来自不同的字段。错误不是描述性的,也不会告诉哪个字段违反了长度约束。如果有人遇到同样的问题,请尝试检查模型的所有字段。