我有一些文本列恰好包含 2 个字符。当我将
models.CharField
与 max_length=2
一起使用时,它仍然会创建一个 Varchar。我检查了 https://docs.djangoproject.com/en/5.0/ref/models/fields/ 并且我找不到要传递以获取 Char(x) 列而不是 Varchar(x )。 TextField
也不适合这个。据我了解,Varchar 使用 2 个额外字节来存储长度信息,这在这里很浪费。那么如何让 Django 创建固定字符长度的列呢?
编辑: 通过这个(固定长度的CharField,如何?),似乎没有办法强制Django创建一个Char,它总是会创建一个Varchar,并且可以将最小-最大长度验证器放在上面。
Django 确实总是会使用
VARCHAR
,所以除非你编写自己的自定义后端,否则它将始终有一个 VARCHAR(2)
。但是,您可以添加 MinValueValidator
[Django-doc],并添加 CheckConstraint
[Django-doc] 在数据库上强制执行此操作:
from django.core.validators import MinValueValidator
from django.db.models.lookups import GreaterThanOrEqual, Length
class MyModel(models.Model):
my_field = models.CharField(max_length=2, validators=[MinValueValidator(2)])
class Meta:
constraints = [
models.CheckConstraints(
check=GreaterThanOrEqual(Length('my_field'), 2),
name='at_least_two_characters',
)
]