如何在django模型字段中用char(N)数据类型代替varchar(N)数据类型?

问题描述 投票:3回答:2

根据django文档 https:/docs.djangoproject.comen1.9topicsdbmodels。

它的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 而不是。我找不到办法,除了手动改变列的位置,我也没有办法。

mysql django postgresql django-models django-orm
2个回答
4
投票

我认为你最好的选择是写一个 自定义字段类型,根据 CharField 并改变其 db_type() 方法。查看相关示例 此处


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.