對(duì)django 2.x版本中models.ForeignKey()外鍵說(shuō)明介紹
下面是代碼
class GroupInfos(models.Model): uid = models.AutoField(primary_key=True) caption = models.CharField(max_length=32, unique=True) ctime = models.DateTimeField(auto_now_add=True, null=True) uptime = models.DateTimeField(auto_now=True, null=True)class UserInfos(models.Model): username = models.CharField(max_length=32, blank=True, verbose_name=’用戶(hù)名’) password = models.CharField(max_length=64, help_text=’text’) email = models.EmailField(max_length=60) user_group = models.ForeignKey(’GroupInfos’, to_field=’uid’, on_delete=’CASCADE’)
說(shuō)明
第一個(gè)class創(chuàng)建一個(gè)名稱(chēng)為app_groupinfos的表
第二個(gè)class創(chuàng)建一個(gè)名稱(chēng)為app_userinfos的表
1、ForeignKey 表示設(shè)置外健
2、to_field表示外健關(guān)聯(lián)的主鍵
3、on_delete有多個(gè)選項(xiàng)
在django2.0后,定義外鍵和一對(duì)一關(guān)系的時(shí)候需要加on_delete選項(xiàng),此參數(shù)為了避免兩個(gè)表里的數(shù)據(jù)不一致問(wèn)題,不然會(huì)報(bào)錯(cuò):
TypeError: init() missing 1 required positional argument: ‘on_delete’
舉例說(shuō)明:
user=models.OneToOneField(User)owner=models.ForeignKey(UserProfile)
需要改成:
user=models.OneToOneField(User,on_delete=models.CASCADE) --在老版本這個(gè)參數(shù)(models.CASCADE)是默認(rèn)值owner=models.ForeignKey(UserProfile,on_delete=models.CASCADE) --在老版本這個(gè)參數(shù)(models.CASCADE)是默認(rèn)值
參數(shù)說(shuō)明:
on_delete有CASCADE、PROTECT、SET_NULL、SET_DEFAULT、SET()五個(gè)可選擇的值
CASCADE:此值設(shè)置,是級(jí)聯(lián)刪除。
PROTECT:此值設(shè)置,是會(huì)報(bào)完整性錯(cuò)誤。
SET_NULL:此值設(shè)置,會(huì)把外鍵設(shè)置為null,前提是允許為null。
SET_DEFAULT:此值設(shè)置,會(huì)把設(shè)置為外鍵的默認(rèn)值。
SET():此值設(shè)置,會(huì)調(diào)用外面的值,可以是一個(gè)函數(shù)。
一般情況下使用CASCADE就可以了。
那么,這個(gè)時(shí)候一個(gè)group就會(huì)對(duì)應(yīng)多個(gè)user,屬于一對(duì)多的類(lèi)型。
當(dāng)我們查詢(xún)一個(gè)組有那些用戶(hù)的時(shí)候,就會(huì)用到當(dāng)前的外健,
創(chuàng)建記錄
并且,在class中定義了foreignKey之后,group還不存在的同時(shí),user表也因?yàn)榧s束的原因,不能被進(jìn)行創(chuàng)建
刪除記錄
并且,在class中定義了foreignKey之后,user中記錄存在的同時(shí),group表中的記錄也因?yàn)榧s束的原因,不能被進(jìn)行刪除
補(bǔ)充知識(shí):owner = models.ForeignKey(User)出現(xiàn)TypeError
owner = models.ForeignKey(User)出現(xiàn)錯(cuò)誤 TypeError: init() missing 1 required positional argument: ‘on_delete’owner = models.ForeignKey(User)
出現(xiàn)下列錯(cuò)誤:
TypeError: __init__() missing 1 required positional argument: ’on_delete’
解決辦法:
owner = models.ForeignKey(User, on_delete=models.CASCADE)
以上這篇對(duì)django 2.x版本中models.ForeignKey()外鍵說(shuō)明介紹就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. python爬蟲(chóng)實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊2. asp批量添加修改刪除操作示例代碼3. 基于javaweb+jsp實(shí)現(xiàn)企業(yè)財(cái)務(wù)記賬管理系統(tǒng)4. css代碼優(yōu)化的12個(gè)技巧5. 如何在jsp界面中插入圖片6. Vue element ui用戶(hù)展示頁(yè)面的實(shí)例7. Ajax返回值類(lèi)型與用法實(shí)例分析8. 使用FormData進(jìn)行Ajax請(qǐng)求上傳文件的實(shí)例代碼9. .NET6打包部署到Windows Service的全過(guò)程10. HTML 絕對(duì)路徑與相對(duì)路徑概念詳細(xì)
