1 回答
TA贡献1829条经验 获得超7个赞
如果您自己没有指定主键, Django会自动添加主键。事实上,正如文档所说:
默认情况下,Django 为每个模型提供以下字段:
id = models.AutoField(primary_key=True)这是一个自动递增的主键。
如果您想指定自定义主键,请在您的字段之一上指定 。
primary_key=True
如果 Django 发现您已显式设置Field.primary_key
,它不会添加自动 id 列。
在你的模型中,你没有设置主键,所以Django会自动添加一个额外的字段id
,这也将在查询中使用。
例如,如果image_url
是主键,您可以将其指定为:
# image_url is the primary key
class Images(models.Model):
# Field name made lowercase.
rezept = models.ForeignKey(
'Rezepte',
models.DO_NOTHING,
db_column='Rezept_ID',
blank=True,
null=True
)
# Field name made lowercase.
image_url = models.CharField(
db_column='Image_URL',
blank=True,
null=True,
max_length=1000,
primary_key=True
)
class Meta:
managed = False
db_table = 'Images'
如果 therezept是主键,那么它也意味着它是唯一的,在这种情况下,将其设为OneToOneField[Django-doc]更有意义,因为它具有ForeignKey唯一性约束,而且它还有一些含义的逆向关系:
# rezept is the primary key
class Images(models.Model):
# Field name made lowercase.
rezept = models.OneToOneField(
'Rezepte',
db_column='Rezept_ID',
primary_key=True
)
# Field name made lowercase.
image_url = models.CharField(
db_column='Image_URL',
blank=True,
null=True,
max_length=1000
)
class Meta:
managed = False
db_table = 'Images'
注意:通常不会_id向ForeignKey字段添加后缀,因为 Django 会自动添加一个带有_id后缀的“孪生”字段。因此应该是rezept,而不是rezept_id。
添加回答
举报