【发布时间】: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 来自该模型的较早的、废弃的实现,最初我有一个 CharField 和 max_length 600,而不是 TextField。
非常欢迎所有评论。
编辑
一些附加信息。就像现在一样,模型是从已经存在的数据库中创建的,这是一个简单的 sqlite 数据库,有一些表,表之间没有关系。表格relatiedata 是一个带有一些文本列的简单表格,有点太大,无法在此处显示。 Makemigrations 和 migrate 当然是在模型构建后使用的,目前 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