在ORM操作處了解的文章中,我們已經(jīng)初步接觸到了主鍵與外鍵的字段定義,那么本文以詳細介紹主鍵外鍵的使用方法等
1.外鍵
在Django中,外鍵是一種關(guān)系字段,用于建立不同模型之間的關(guān)聯(lián)關(guān)系。外鍵字段允許一個模型引用另一個模型的主鍵,從而創(chuàng)建模型之間的關(guān)系。
使用外鍵可以實現(xiàn)數(shù)據(jù)庫之間的關(guān)聯(lián),例如一個博客文章可以有多個評論,每個評論又關(guān)聯(lián)到一個特定的博客文章。在這種情況下,可以在評論模型中使用外鍵字段來引用博客文章模型的主鍵。
在Django中,定義外鍵字段非常簡單。只需在模型中的字段中使用ForeignKey類,并指定關(guān)聯(lián)的模型作為參數(shù)。例如:
class Personnel(models.Model):
id = models.AutoField(verbose_name="工號", primary_key=True, db_index=True)
name = models.CharField(verbose_name="姓名", max_length=16, null=False)
age = models.PositiveIntegerField(verbose_name="年齡", default=1)
class Contact(models.Model):
con_id = models.AutoField(verbose_name="聯(lián)系表序號", primary_key=True)
phone = models.CharField(verbose_name="手機號碼", max_length=16, null=False)
address = models.TextField(verbose_name="住址", default='宿舍')
work_id = models.ForeignKey(to="Personnel", on_delete=models.SET_NULL, null=True)
那么在以上代碼中有兩個模型,分別是Personnel模型和Contact模型,其中Personnel模型中設(shè)定了id這個字段為主鍵,Contact模型設(shè)定了con_id這個字段為主鍵,work_id為外鍵,讓我們細看work_id這個字段的定義:
- to:需要傳遞被外鍵連接的主表模型作為值,如果連接時主表模型還沒定義,建議使用主表模型類名加上"",這樣就不會報錯。
- on_delete:需要傳遞當主表中的一條數(shù)據(jù)刪除時,從表中與這條數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)要執(zhí)行怎樣的動作。
- to_field:允許你指定要引用的目標模型中的特定字段作為外鍵
to和on_delete這兩個參數(shù)不可避免,但to_field參數(shù)不指定,一般會默認為連接的主表的主鍵。
那么現(xiàn)在讓我們看看on_delete這個參數(shù)里面有哪些選項:文章來源:http://www.zghlxwxcb.cn/news/detail-726641.html
- models.CASCADE:級聯(lián)操作,當主表中被連接的一條數(shù)據(jù)刪除時,從表中所有與之關(guān)聯(lián)的數(shù)據(jù)同時被刪除
- models.SET_NULL:當主表中的一行數(shù)據(jù)刪除時,從表中所有與之關(guān)聯(lián)的數(shù)據(jù)的相關(guān)字段設(shè)置為null,此時注意定義外鍵時,這個字段必須可以允許為空
- models.PROTECT:當主表中的一行數(shù)據(jù)刪除時,由于從表中相關(guān)字段是受保護的外鍵,所以都不允許刪除
- models.SET_DEFAULT:當主表中的一行數(shù)據(jù)刪除時,從表中所有相關(guān)的數(shù)據(jù)的關(guān)聯(lián)字段設(shè)置為默認值,此時注意定義外鍵時,這個外鍵字段應該有一個默認值,default也可以是一個函數(shù)(在任意字段均可),此時可以,注意這時只傳遞函數(shù)名稱,django在操作時會幫我們自動執(zhí)行
def publisher():
return Publisher.objects.get(pk=1)
class Book(models.Model):
name = models.CharField(max_length=64,blank=True)
content = models.TextField(blank=True)
pub_time = models.DateTimeField(auto_now_add=True)
publisher = models.ForeignKey(Publisher,on_delete=models.SET_DEFAULT,null=True,default=publisher)
- models.SET():當主表中的一條數(shù)據(jù)刪除時,從表中所有的關(guān)聯(lián)數(shù)據(jù)字段設(shè)置為SET()中設(shè)置的值,與models.SET_DEFAULT相似,只不過此時從表中的相關(guān)字段不需要設(shè)置default參數(shù)
- models.DO_NOTHING:什么都不做,一切都看數(shù)據(jù)庫級別的約束,注數(shù)據(jù)庫級別的默認約束為RESTRICT,這個約束與django中的models.PROTECT相似
2.主鍵
Django是一個流行的Python Web框架,它提供了許多強大的功能和工具,用于簡化開發(fā)高性能、可擴展的Web應用程序。其中一個關(guān)鍵概念是主鍵(Primary Key),它在數(shù)據(jù)庫中用于唯一標識每個記錄。
在Django中,主鍵是一個特殊的字段,用于確保每個數(shù)據(jù)庫記錄的唯一性。默認情況下,Django會自動為每個模型(Model)添加一個名為"id"的主鍵字段,該字段使用自增長整數(shù)作為唯一標識符。
主鍵在數(shù)據(jù)庫中起著非常重要的作用。它不僅用于確保數(shù)據(jù)的唯一性,還可以用作數(shù)據(jù)之間的關(guān)聯(lián)。通過在模型中定義外鍵(Foreign Key),可以輕松地建立表與表之間的關(guān)系,實現(xiàn)數(shù)據(jù)的連接和查詢。
Django提供了多種主鍵類型,可以根據(jù)實際需求選擇合適的類型。除了默認的自增長整數(shù)主鍵,還可以使用UUID、字符型字段等作為主鍵。這樣可以更好地適應不同類型的應用程序和數(shù)據(jù)庫需求。
在使用Django開發(fā)應用程序時,主鍵的正確使用非常重要。它不僅能夠提高數(shù)據(jù)的查詢效率和準確性,還可以簡化代碼邏輯和數(shù)據(jù)管理。通過合理地設(shè)計和使用主鍵,可以實現(xiàn)更高效、可靠的Web應用程序。
總而言之,Django的主鍵是確保每個數(shù)據(jù)庫記錄的唯一性和關(guān)聯(lián)性的重要工具。它為開發(fā)人員提供了靈活的選擇,以滿足各種應用程序和數(shù)據(jù)庫需求。正確地使用主鍵可以提高數(shù)據(jù)管理和查詢效率,同時簡化代碼邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-726641.html
到了這里,關(guān)于Django之主鍵外鍵詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!