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。
添加回答
舉報