日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django Models一对多操作

發布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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一对多操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。