1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您自己沒(méi)有指定主鍵,?Django會(huì)自動(dòng)添加主鍵。事實(shí)上,正如文檔所說(shuō):
默認(rèn)情況下,Django 為每個(gè)模型提供以下字段:
id?=?models.AutoField(primary_key=True)這是一個(gè)自動(dòng)遞增的主鍵。
如果您想指定自定義主鍵,請(qǐng)?jiān)谀淖侄沃簧?strong>指定 。
primary_key=True
如果 Django 發(fā)現(xiàn)您已顯式設(shè)置Field.primary_key
,它不會(huì)添加自動(dòng) id 列。
在你的模型中,你沒(méi)有設(shè)置主鍵,所以Django會(huì)自動(dòng)添加一個(gè)額外的字段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是主鍵,那么它也意味著它是唯一的,在這種情況下,將其設(shè)為OneToOneField[Django-doc]更有意義,因?yàn)樗哂蠪oreignKey唯一性約束,而且它還有一些含義的逆向關(guān)系:
# 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'
注意:通常不會(huì)_id向ForeignKey字段添加后綴,因?yàn)?Django 會(huì)自動(dòng)添加一個(gè)帶有_id后綴的“孿生”字段。因此應(yīng)該是rezept,而不是rezept_id。
添加回答
舉報(bào)