Django 字段使用 Char 代替 Varchar

问题描述 投票:0回答:1

我有一些文本列恰好包含 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
1个回答
0
投票

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',
            )
        ]
© www.soinside.com 2019 - 2024. All rights reserved.