mysql - 如何在 Django 模型字段中强制执行 char(N) 数据类型而不是 varchar(N)

标签 mysql django postgresql django-models django-orm

根据 django 文档 https://docs.djangoproject.com/en/1.9/topics/db/models/

它是 ORM 创建 varchar 字段而不是 char

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

和等价的sql语句

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
); 

所以在这里我们可以看到它使用的是 varchar,但我可以使用 char 代替吗?我找不到办法。 除了手动更改列之外

最佳答案

对于那些与@andrai-avram 给出的答案斗争的人, 这就是它的样子:

from django.db import models
class ActualCharField(models.CharField):
    def db_type(self, connection):
        varchar: str = super().db_type(connection)
        char: str = varchar.replace('varchar', 'char')
        return char

然后只使用这个类而不是默认的 django.db.models.CharField

关于mysql - 如何在 Django 模型字段中强制执行 char(N) 数据类型而不是 varchar(N),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456801/

相关文章:

mysql - CakePHP 模型链查找

django - 如何加载 ClearableFileInput/FileField 的初始值(在绑定(bind)表单之前)

postgresql - 从企业架构师连接到 postgresql

ruby-on-rails - ActiveRecord::StatementInvalid: PG::ReadOnlySqlTransaction: - 即使取消关注后,Heroku 数据库仍然只读

php - 在 mysql 数据库中将组装的 var 以 Unix 时间格式插入

mysql - 电脑离线时连接nodeJS到MySQL

包含的 PHP + MySQL 登录

python - 注销后Django重新加载并重新登录

python - 如何在 Django 中创建类似 controller/action/id 的 url 模式?

sql - 在给定日期之间获取最高分条目