首页 > 解决方案 > DataError:类型字符变化的值太长(1024)TextField

问题描述

您好,我的 Django 模型有这个问题。字段是来自 TinyMCE 的 HTMLField,它继承自 Django 的 TextField,因此它应该是无限的。db 是否有可能以某种方式截断了这个长度?我正在插入大约 4k 个字符长的字符串,并且我使用 psql (PostgreSQL) 12.3 作为我的数据库。谢谢

模型:

class Category(Model):
    page_content_html=HTMLField(_("page content"), blank=True, null=False, default=''),
  
)

HTML字段:

class HTMLField(models.TextField):
"""
A text area model field for HTML content.

It uses the TinyMCE 4 widget in forms.

Example::

    from django.db.models import Model
    from tinymce import HTMLField

    class Foo(Model):
        html_content = HTMLField('HTML content')
"""
def __init__(self, *args, **kwargs):
    self.tinymce_profile = kwargs.pop('profile', None)
    super(HTMLField, self).__init__(*args, **kwargs)

def formfield(self, **kwargs):
    defaults = {
        'widget': TinyMCE(profile=self.tinymce_profile)
    }
    defaults.update(kwargs)
    # As an ugly hack, we override the admin widget
    if defaults['widget'] == AdminTextareaWidget:
        defaults['widget'] = AdminTinyMCE(profile=self.tinymce_profile)
    return super(HTMLField, self).formfield(**defaults)

psql:

          Sloupec      |          Typ           | Collation | Nullable |                        Implicitně                        
-------------------+------------------------+-----------+----------+----------------------------------------------------------
 id                | integer                |           | not null | nextval('product_category_translation_id_seq'::regclass)
 language_code     | character varying(15)  |           | not null | 
 name              | character varying(256) |           | not null | 
 long_name         | character varying(512) |           | not null | 
 page_content_html | text                   |           | not null | 
 master_id         | integer                |           |          | 
 description_html  | text                   |           | not null | 
 page_description  | text                   |           | not null | 
 page_keywords     | character varying(512) |           | not null | 
 page_title        | character varying(256) |           | not null | 
 page_url_slug     | character varying(256) |           | not null | 

标签: djangopostgresql

解决方案


value too long for type character varying(1024)是 PostgreSQL 错误,表示您的应用程序正在尝试将数据插入VARCHAR(1024)列。但是,您的表定义没有与此定义匹配的列,所以我想知道应用程序是否实际上正在尝试将数据插入到不同的表中(例如,在不同模式中具有相同名称的表,甚至与您认为它正在连接的数据库不同的数据库)。

以下查询应识别所有VARCHAR(1024)列并提供有关应用程序尝试在何处插入数据的更多线索:

SELECT table_schema, table_name, column_name
  FROM information_schema.columns
 WHERE data_type = 'character varying'
   AND character_maximum_length = 1024;

请注意,查询将仅显示当前数据库的信息。


推荐阅读