【问题标题】:Django Admin DataError: Value too long for type character varying(150)Django Admin DataError:类型字符变化的值太长(150)
【发布时间】:2015-06-29 11:08:03
【问题描述】:

我在 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 管理员那里得到以下异常。我将其设置为 150 个字符,这是根据 WebPublicationAdmin 的定义输入字段允许的最大值(这是预期的)。

DataError: value too long for type character varying(150)

请注意错误消息如何不反映模型的当前状态。 (我运行了一个迁移,它是成功的,因为 PostgreSQL 是这么说的。)

这里可能有什么问题?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 恐怕没有做到。
      猜你喜欢
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2012-02-04
      • 2019-04-06
      相关资源
      最近更新 更多