我有一个运行我们几年前在内部构建的迷你CMS的Django网站,它使用的是postgresql。保存简单标题和文本段落时,我收到以下错误:
value too long for type character varying(100)
奇怪的是,不是单个列变化(100)它们都是200或250,即使默认的Django由于re-opened ticket mentioned here
而已从100更改为200有谁知道这个问题的解决方案?
答案 0 :(得分:60)
我可以打赌,你有一个没有预定义长度的SlugField吗?将其设置为255并迁移
答案 1 :(得分:25)
使用文件字段时我也遇到了这个问题,并且有一段时间我在挠头。当然,默认的FileField实例创建时具有100个字符的限制。
https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield
答案 2 :(得分:13)
这是来自Postgres的错误消息,而不是django。
您似乎更改了models.py
中字段的长度,但这并未更改执行manage.py syncdb
时创建的数据库长度。
您必须直接更改数据库中字段的长度。
答案 3 :(得分:1)
Michael Samoylov的回答指出了我正确的方向。我遇到了同样的错误,除了它是FileField。
即使您没有明确设置max_length,字段也会有max_length。增加该值以使数据适合以避免错误。
在我的情况下,数据太大而无法合理地存储在数据库中。我将文件保存到磁盘,然后将文件路径保存在数据库中。
答案 4 :(得分:0)
我意识到这个问题已经得到解答,但是在寻找错误信息时来到这里的其他人:
在我的情况下,问题是我的表名超过了50个字符。显然这是不允许的。更改表名解决了问题。
答案 5 :(得分:0)
我和django-autoslugfield有类似的问题 我正在使用类似的包,然后切换到django-autoslugfield
我收到了这个错误:
value too long for type character varying(50)
尽管我的models.py有:
slug = AutoSlugField(max_length=255, populate_from='name', unique=True)
在我的数据库中它的类型是
character varying 255
一旦我从字段中移除max_length=255
,即
slug = AutoSlugField(populate_from='name', unique=True)
然后它运作良好
答案 6 :(得分:0)
如果您使用的是Django,并且这些都不起作用。尝试删除所有迁移文件并再次运行
python manage.py makemigrations
然后
python manage.py migrate
答案 7 :(得分:0)
如果不是SlugField
,FileField
或此处提到的任何其他字段,请滚动回到迁移卡在终端的位置。对我来说是AddField
好说话。
答案 8 :(得分:0)
Django 2.1
我从sqlite3切换到postgresql时遇到了这个问题。 删除每个应用程序的迁移文件夹中的迁移文件,但 __ init __。py 除外 然后重新运行迁移
(venv)myapp$python manage.py makemigrations
(venv)myapp$python manage.py migrate
(venv)myapp$python manage.py runserver
答案 9 :(得分:0)
首先,尝试对模型中所有适用的字段类型将max_length设置为合理的值。
例如:MyText = models.CharField(max_length=2000)
如果您未设置max_length,则您的数据库可能正在应用默认的max_length,该长度短于输入数据的长度,从而导致您的value too long for type character
错误。
如果这不起作用,并且您从SQLite开始并将数据库更改为PostgreSQL,则以前从SQLite进行的迁移可能会干扰新的PostgreSQL迁移。
进入项目的迁移文件夹,并删除旧的迁移文件以重新开始。然后尝试makemigrations并再次迁移:)
答案 10 :(得分:0)
我也遇到了同样的错误。当我对模型进行更改时,我仍然遇到相同的错误。
这是我修复它的方式。 可能有必要跳过少量迁移,以便仅使用对CharField max_lenght进行了更改的迁移程序。
为此,您必须运行
python manage.py showmigrations
查看尚未进行的迁移。
然后跳过它们,直到使用命令到达最后一个
python manage.py migrate <app> 000_migration_number --fake
答案 11 :(得分:0)
预定义字段会造成问题。将其扩展到所需的长度,我认为问题将得到解决。
答案 12 :(得分:0)
该值可以是 100 或 25 或 17 无论如何,其背后的原因是模型,搜索您添加特定长度(17,25)的位置,您将得到错误! ,
您试图强加的字段长度超过上述长度。
解决了我的问题,希望对你也有帮助
答案 13 :(得分:0)
对于 FileField 和 ImageField,来自 Django 文档:
FileField 实例在您的数据库中创建为 varchar 列,默认最大长度为 100 个字符。与其他字段一样,您可以使用 max_length 参数更改最大长度。