Django Models一对多操作
生活随笔
收集整理的這篇文章主要介紹了
Django Models一对多操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
特別注意:
新版django新建ForeignKey時需要添加?on_delete=models.CASCADE,即
models.ForeignKey("UserType",on_delete=models.CASCADE)一,新建models文件 class UserInfo(models.Model):
name = models.CharField(max_length=10)
password = models.CharField(max_length=100)
user_type = models.ForeignKey("UserType",on_delete=models.CASCADE)
class UserType(models.Model):
id = models.AutoField(primary_key=True)
caption = models.CharField(max_length=10)
二,在views下添加數據
1.使用create添加數據 models.UserType.objects.create(caption="管理員")
2.使用對象管理添加數據
2.1 obj = models.UserType()
obj.caption = "超級管理員"
obj.save()
2.2
obj1 = models.UserType(caption="普通用戶")
obj1.save()
3.使用字典方式添加數據 user_type_dict = {"caption":"打雜的"}
models.UserType.objects.create(**user_type_dict)
user_info_dict1 = {"name":"n1","password":"123","user_type":models.UserType.objects.get(caption="管理員")}
models.UserInfo.objects.create(**user_info_dict1)
user_info_dict2 = {"name": "n2", "password": "123", "user_type": models.UserType.objects.get(caption="超級管理員")}
models.UserInfo.objects.create(**user_info_dict2)
user_info_dict3 = {"name": "n3", "password": "123", "user_type": models.UserType.objects.get(caption="普通用戶")}
models.UserInfo.objects.create(**user_info_dict3)
三,models正向查找
1.通過外鍵查找其他表數據
obj = models.UserInfo.objects.filter(name="n1").first()
print(obj.user_type.caption)
通過UserInfo表查找UserType表的caption列的數據,使用外鍵user_type
2.通過牛逼的雙下劃線__正向連表操作
obj = models.UserInfo.objects.filter(name="n1",user_type__caption="管理員").values("name","user_type__caption")
print(obj.all().first().get("name"))
通過filter過濾條件,通過外鍵__其他表的屬性來操作其他表,這與第一種操作方式(三【1】)的區別是:
這是對 對象來進行操作,而之前都是通過對某一行具體的數據進行操作
values方法表示新數據有哪些列,values會生成一個字典,還有一個values_list,會生成一個元組
四,models反向查找
1.通過_set反向查找
obj = models.UserType.objects.filter(caption="管理員").first()
print(obj.userinfo_set.all().first().password)
反向查找時時通過其他表的表名加_set進行列的選取,而正向查找時時通過外鍵,除此之外,userinfo_set生成的是一個特殊對象djangoapp.UserInfo.None,
特別注意:通過_set進行反向查找時,必須要使用表名,而不是類名,即:有大小寫區分 2.通過牛逼的雙下劃線__反向連表操作
obj = models.UserType.objects.filter(caption="管理員").values("caption","userinfo__name")
print(obj)
通過caption進行filter,在顯示值的時候,使用了表名+__列名來進行反向連表操作
總結:在使用連表操作時(即:要展示多個表的數據時),都使用__來進行表之間的屬性調用,正向查找使用外鍵,反向查找使用表名
在表1調用表2的數據時,正向查找使用外鍵.屬性,反向查找使用表名_set
補充:
一對一連表操作時一對多連表操作的衍化
1.使用外鍵一對一
外鍵與外鍵關聯的列使用唯一索引,即:unique=True,這樣兩張表就一對一了
2.使用models.OneToOneField創建一對一關系,原理就是1
轉載于:https://www.cnblogs.com/binpeng/p/8947888.html
總結
以上是生活随笔為你收集整理的Django Models一对多操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ubuntu下搭建一个数据化处理的开发环
- 下一篇: 硬分叉升级越来越近,BCH社区都在做什么