django - 我可以在不更新 Django 模型的情况下更改数据库中的列类型吗?
问题描述
我有一个 django 项目,它创建了模型,例如:
from django.db import models
class Person(models.Model):
title = models.CharField(max_length=30)
description = models.CharField(max_length=30)
这将创建表:
CREATE TABLE myapp_person (
"id" serial NOT NULL PRIMARY KEY,
"title" varchar(30) NOT NULL,
"description" varchar(30) NOT NULL
);
现在我想知道我可以将列类型更改为“LONGTEXT”而无需更改模型吗?这会导致错误吗?我无法访问 django 代码,但我可以访问数据库并且正在导入数据,并且值超过 30 个字符。
解决方案
这会导致错误吗?
可能不会,因为它仍会与数据库进行字符串通信。
我无法访问 django 代码,但我可以访问数据库并且正在导入数据,并且值超过 30 个字符。
这取决于如何实现创建记录的逻辑,这可能是一个问题。ModelForm
例如A或 aSerializer
将经常执行验证,从而检查字符数是否确实小于或等于 30,如果不是,它将不接受这些值。
话虽如此,让模型和数据库不同步通常是一个(非常)糟糕的主意。因此,最好将字段更改为 a TextField
,进行迁移,迁移数据库并运行程序:
from django.db import models
class Person(models.Model):
title = models.CharField(max_length=30)
description = models.TextField()
我建议不要更改数据库并保持 Django 数据不变,因为您最终会遇到数据库将接受 Django 模型预期之外的其他数据的情况。
推荐阅读
- katalon-studio - Katalon Studio 的数据绑定和类型
- mongodb - mongo 聚合到嵌套数组上的 elemMatch
- jenkins - ssh_askpass: exec(/app/jenkins-slave/workspace/foo@tmp/askpass_foo.sh): 没有这样的文件或目录
- symfony - 如何在 symfony 5 上安装 Ckeditor?
- python - 是否可以仅限制使用来自不同类的 setter/modifier 方法?
- jsp - 禁用基于 url 的导航栏元素
- c++ - c ++返回指向函数内部定义的静态数组的指针是否有效?
- windows - 带有 CPack 的应用程序符号
- c++17 - 如何在 Windows 上将 std::filesystem 与 mingw32-make 和 msys2 一起使用
- javascript - 如何创建递归函数来隐藏显示子父问题