如何在django模型字段中强制使用char(N)数据类型而不是varchar(N)

时间:2015-12-24 18:49:19

标签: mysql django postgresql django-models django-orm

根据django docs 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代替。我找不到方法。 除了手动改变列

2 个答案:

答案 0 :(得分:4)

对于那些与@ 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

答案 1 :(得分:3)

我认为最好的办法是写一个custom field type,将其基于CharField并更改其db_type()方法。检查相关示例here