首页 > 解决方案 > 我可以在不更新 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

解决方案


这会导致错误吗?

可能不会,因为它仍会与数据库进行字符串通信。

我无法访问 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 模型预期之外的其他数据的情况。


推荐阅读