問題
想要在 orm
中定義外來鍵,便於關聯查詢,但不想在資料庫中生成實際的外來鍵約束。
解決方式
Django
的 ForeignKey
和資料庫的 FOREIGN KEY
並不一樣。Django
的 ForeignKey
是一種邏輯上的兩個表的關聯關係,可以指定是否使用資料庫的 FOREIGN KEY
約束。
如:
from django.db import models
class Province(models.Model):
name = models.CharField(max_length=16)
def __unicode__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=16)
province = models.ForeignKey(Province, null=True, on_delete=models.DO_NOTHING, related_name='cities', db_constraint=False)
如果 ForeignKey
不新增 db_constraint=False
引數,會在資料庫中使用外來鍵約束。
另外,ForeignKey
的 on_delete
引數預設為 on_delete=models.CASCADE
,表示使用資料庫的級聯刪除,使用 on_delete=models.SET_NULL
可以使刪除 Province
時將關聯的 City
表對應的 province_id
值設為 NULL
。
使用這種方式不會破壞 Django
的反向關聯查詢。
參考
Django 的 ForeignKey 與資料庫的 FOREIGN KEY約束_我的總結積累與分享-CSDN部落格