我正在使用PostgreSQL开发Django项目,其中表和字段名称是使用 双引号。有人知道如何禁用此行为吗?
[模型定义]
class Test1(models.Model):
key = models.UUIDField('key', db_column='KEY', editable=False, unique=True, default=uuid.uuid4)
name = models.CharField('name', db_column='NAME', max_length=128, null=False)
class Meta:
db_table = 'Test1'
[迁移]
operations = [
migrations.CreateModel(
name='Test1',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(db_column='KEY', default=uuid.uuid4, editable=False, unique=True, verbose_name='key')),
('name', models.CharField(db_column='NAME', max_length=128, verbose_name='name')),
],
options={
'db_table': 'Test1',
},
),
]
[生成DDL]
create table "Test1"
(
id serial not null constraint "Teste4_pkey" primary key,
"KEY" uuid not null constraint "Teste4_KEY_key" unique,
"NAME" varchar(128) not null
);
alter table "Test1" owner to postgres;
[期望DDL]
create table Test1
(
id serial not null constraint "Teste4_pkey" primary key,
KEY uuid not null constraint "Teste4_KEY_key" unique,
NAME varchar(128) not null
);
alter table "Test1" owner to postgres;
[要求]
答案 0 :(得分:0)
这是在Django中设计的,因此是有意设计的。这是参数化的方式。
假设某人的列名带有test column name
之类的空格,然后考虑会发生什么。
它将导致一些不必要的错误,因此请不要更改框架的底层逻辑。
答案 1 :(得分:0)
感谢@BjarniRagnarsson,大写字母正像@Sanjay所提到的那样使框架具有这种行为。
解决方案:
class Test1(models.Model):
key = models.UUIDField('key', db_column='key', editable=False, unique=True, default=uuid.uuid4)
name = models.CharField('name', db_column='name', max_length=128, null=False)
class Meta:
db_table = 'test1'