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