【发布时间】:2020-07-18 15:53:20
【问题描述】:
我正在使用带有 postgres 的 Django。这是我用来在数据库中创建表的代码的 sn-p。
class user(models.Model):
user_id = models.IntegerField(primary_key=True)
username = models.CharField(max_length=30)
password = models.CharField(max_length=30)
role_id = models.ForeignKey(role,on_delete=models.CASCADE)
class Meta:
db_table = 'user'
我的问题是:
【问题讨论】:
-
如果您使用
ForeignKey,那么它将创建一个名为field_id的“双字段”,其中包含主键,这就是您不使用_id后缀在ForeignKey字段中。 -
表名两边的双引号是为了保护大小写敏感。 python 字符串区分大小写,但没有引号将在 postgres 中小写。它不会影响任何事情,您无需担心。
-
双引号不是必需的,但不会对您的情况造成任何伤害。如果表格有大写字符,则需要引号来保留它们。否则查询解析器会将所有字符转换为小写。
-
@Willem Van Onsem。 Django 不会创建“双字段”,每个关系只有一个 FK 字段。 Django 在创建表时只是将模型中的任何字段名称附加到“_id”,除非您使用
db_column覆盖。此外,该字段不包含 PK,因为您可以在 FK 中有重复的条目。此外,FK 不必指向 PK 字段,只需指向UNIQUE。 -
@AdrianKlaver:不,事实上你甚至可以分配给那个字段,例如
user.role_id_id=4。ForeignKey没有保存在数据库中,因为数据库实际上并没有ForeignKey字段,但它也创建了一个可以接受值的具有相同类型的字段。请注意,model 字段本身并不映射到数据库字段。事实上,很多包都有字段,例如数据库中的两个或三个字段,反之亦然。
标签: sql django database postgresql