【问题标题】:Django max_length where there should not be a max_length不应有 max_length 的 Django max_length
【发布时间】:2021-04-23 21:21:45
【问题描述】:

我对 Django 的了解并不深入,无论如何也不足以解决我的应用程序中出现的问题。

在 models.py 我有 a.o.以下定义:

class Relatiedata(models.Model):
    ...
    getuigen = models.TextField(blank=True, null=True)
    ...

    class Meta:
        db_table = 'relatiedata'

Relatiedata.objects = Relatiedata.objects.using('genealogie')

所以在数据库genealogie(不是默认数据库)中,我有一个表relatiedata,其中有一列getuigen,它必须包含一个没有长度限制的文本字符串。

此外,我有一个用于更改该表记录的用户表单。像往常一样,表单是从Relatiedata.object 填充的,返回的表单会导致另一个Relatiedata.object 被保存,从而更新数据库。这(几乎)完美。

问题是,在我的表单中,无法在 getuigen 的文本区域中输入长度超过 600 的字符串。较长的字符串被简单地切断。尽管在模型、数据库和迁移文件中都没有这样的限制,但似乎对该字段的长度进行了某种形式的验证。

这个值 600 来自该模型的较早的、废弃的实现,最初我有一个 CharFieldmax_length 600,而不是 TextField

非常欢迎所有评论。

编辑

一些附加信息。就像现在一样,模型是从已经存在的数据库中创建的,这是一个简单的 sqlite 数据库,有一些表,表之间没有关系。表格relatiedata 是一个带有一些文本列的简单表格,有点太大,无法在此处显示。 Makemigrationsmigrate 当然是在模型构建后使用的,目前 makemigrations 没有找到任何要迁移的东西。

更糟糕的是:当我更改定义时:

getuigen = models.CharField(max_length=2000, blank=True, null=True), 

makemigrations 显示了这个变化,migrate 解决了它,但是在表单中仍然无法使用超过 600 个字符的字符串。少一点就OK了。

最后,我可以使用SQL 将字段getuigen 的值更改为超过600 个字符的字符串。完成此操作后,在我的应用程序中,即使在我的突变形式中,长字符串也会在所有输出中正确出现。但在突变形式中,它不能被编辑,因为它太长了。

【问题讨论】:

  • 你做了makemigrations并迁移了
  • 您使用哪个数据库?你能从那个数据库发布 Relatiedata 表吗?
  • @iklinac:是的,但这没有帮助,请查看编辑。
  • @barbaart1:在这里发布它有点太大了,但它似乎工作正常。请查看我的编辑。
  • @FredSimons ,您是否像这样手动更改了列? ALTER TABLE ALTER COLUMN VARCHAR (2000);

标签: django


【解决方案1】:

进行迁移并再次迁移

python manage.py makemigrations specify_app_name

然后

python manage.py migrate specify_app_name

【讨论】:

  • 谢谢,我已经这样做了,但徒劳无功。请查看我的编辑。
猜你喜欢
  • 2015-08-31
  • 2016-04-19
  • 2011-03-13
  • 1970-01-01
  • 2018-07-19
  • 2018-08-23
  • 1970-01-01
  • 2012-04-23
  • 2012-04-01
相关资源
最近更新 更多