亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

django ManyToManyField多對多關(guān)系的實(shí)例詳解

 更新時間:2019年08月09日 09:39:10   作者:zenge_blog  
今天小編就為大家分享一篇django ManyToManyField多對多關(guān)系的實(shí)例詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

Django 的 ORM 有多種關(guān)系:一對一,多對一,多對多

各自定義的方式為 :

一對一: OneToOneField

多對一: ForeignKey

多對多: ManyToManyField

上邊的描述太過數(shù)據(jù)而缺乏人性化,我們來更人性化一些:

多個屬于一個,即 belong to : ForeignKey,多個屬于一個

一個有一個,即 has one: OneToOneField

一個有很多個,即 has many: lots of A belong to B 與 B has many A,在建立 ForeignKey 時,另一個表會自動建立對應(yīng)的關(guān)系

一個既有很多個,又屬于很多個,即 has many and belong to : ManyToManyField,同樣只能在一個model類中說明,關(guān)聯(lián)表會自動建立。

多對多的關(guān)系:

舉例:現(xiàn)有兩張表,user表和group表。user表中的字段有用戶名,郵箱,年齡等信息。而group表中有組名信息。我們知道一個用戶可以屬于多個組,一個組中也可以包含多個用戶,所以這兩張表的關(guān)系就是多對多的關(guān)系。

mysite/learn/models.py文件代碼

#coding:utf8
from django.db import models

class Group(models.Model):
  Name = models.CharField(max_length=20)
  def __unicode__(self):
    return self.Name
    
    
class User(models.Model):
  Name = models.CharField(max_length=20)
  Email = models.CharField(max_length=50)
  group = models.ManyToManyField(Group,blank=True)
  def __unicode__(self):
    return self.Name
  def group_list(self):
    return ','.join([i.Name for i in self.group.all()])

創(chuàng)建兩張表Group和User,Group表中只有組名“Name”這一個字段。而User表中有用戶名“Name”,郵箱“Email”,組名“group”三個字段。

在User表中,由于group信息與Group表關(guān)聯(lián)的,所以要在User表中設(shè)置

ManyToManyField
def group_list(self):
    return ','.join([i.Name for i in self.group.all()])

定義group_list函數(shù),是為了在后臺頁面中顯示group_list字段信息。group_list是后臺頁面顯示的字段名稱。

i.Name for i in self.group.all()

這里Name是Group表中的Name字段,self.group中的group是User表自己的group字段

mysite/admin.py文件中的代碼

from django.contrib import admin
from learn.models import *
# Register your models here.

class UserAdmin(admin.ModelAdmin):
  list_display = ['id','Name','Email','group_list']
admin.site.register(User,UserAdmin)

class GroupAdmin(admin.ModelAdmin):
  list_display = ['id','Name']
admin.site.register(Group,GroupAdmin)

訪問admin后臺管理頁面

在group表中創(chuàng)建組

在user表中創(chuàng)建用戶,Group字段選擇用戶組。

仔細(xì)看上面的截圖,會發(fā)現(xiàn)一個問題-->在Group表中只有組名字段,但是看不到每個組中都有哪些用戶。而User表中可以看到group_list字段,所以如果希望在Group中顯示用戶信息,可以仿照User表的做法,mysite/learn/models.py文件代碼

#coding:utf8
from django.db import models

class Group(models.Model):
  Name = models.CharField(max_length=20)
  def user_list(self):
    return ','.join([i.Name for i in self.user_set.all()])
  def __unicode__(self):
    return self.Name
class User(models.Model):
  Name = models.CharField(max_length=20)
  Email = models.CharField(max_length=50)
  group = models.ManyToManyField(Group,blank=True)
  def __unicode__(self):
    return self.Name
  def group_list(self):
    return ','.join([i.Name for i in self.group.all()])

在learn/admin.py文件中加上user_list字段

再次訪問admin后臺管理頁面,在group表中可以看到user_list信息了。

正向查詢和反向查詢

正向查詢:

上面我們創(chuàng)建了兩張表user和group,現(xiàn)在我想查詢user表中某個用戶的所屬組

進(jìn)入django shell命令行

python manage.py shell
>>> from learn.models import *
>>> User.objects.all()
[<User: 老黃>, <User: 老張>, <User: 老王>]
>>> User.objects.all()[0]
<User: 老黃>
>>> User.objects.all()[0].Email
u'laohuang@qq.com'
>>> User.objects.all()[0].group.all()
[<Group: CEO>, <Group: COO>]
>>> User.objects.all()[0].group.all()[0].Name
u'CEO'
>>> User.objects.all()[0].group.all()[0].id

mysite/models.py文件中的每一個類都是一個對象,使用

User.objects.all()

可以獲取所有對象,它是一個列表

[<User: 老黃>, <User: 老張>, <User: 老王>]

獲取第一個對象

>>> User.objects.all()[0]
<User: 老黃>

獲取老黃這個對象的郵箱屬性的值

>>> User.objects.all()[0].Email
u'laohuang@qq.com'

獲取用戶所屬組的組名,和id

>>> User.objects.all()[0].group.all()[0].Name
u'CEO'
>>> User.objects.all()[0].group.all()[0].id

反向查詢:

>>> from learn.models import * ##導(dǎo)入models中所有的類

>>> Group.objects.all()  ##查看Group表中所有的對象
[<Group: CEO>, <Group: CTO>, <Group: COO>, <Group: VP>]

>>> Group.objects.all()[0] ##查看Group表中第一個對象CEO
<Group: CEO>

>>> Group.objects.all()[0].Name ##查看CEO這個對象的Name屬性
u'CEO'

>>> Group.objects.all()[0].user_set.all() ##反向查看CEO這個對象的用戶名
[<User: 老黃>]

>>> Group.objects.all()[0].user_set.all()[0]
<User: 老黃>

>>> Group.objects.all()[0].user_set.all()[0].Email ##反向查看CEO這個對象的Email
u'laohuang@qq.com'

>>> Group.objects.all()[0].user_set.all()[0].Name 
u'\u8001\u9ec4'

以上這篇django ManyToManyField多對多關(guān)系的實(shí)例詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • pandas中實(shí)現(xiàn)將相同ID的字符串進(jìn)行合并

    pandas中實(shí)現(xiàn)將相同ID的字符串進(jìn)行合并

    這篇文章主要介紹了pandas中實(shí)現(xiàn)將相同ID的字符串進(jìn)行合并問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)

    python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)

    今天小編就為大家分享一篇python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python 控制終端輸出文字的實(shí)例

    Python 控制終端輸出文字的實(shí)例

    今天小編就為大家分享一篇Python 控制終端輸出文字的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python調(diào)用.NET庫的方法步驟

    Python調(diào)用.NET庫的方法步驟

    這篇文章主要介紹了Python調(diào)用.NET庫的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • pyqt5打包成exe可執(zhí)行文件的方法

    pyqt5打包成exe可執(zhí)行文件的方法

    最近做了一個窗口程序,那么能不能將其生成一個可執(zhí)行文件,本文就介紹一下pyqt5打包成exe可執(zhí)行文件的方法,感興趣的可以了解一下
    2021-05-05
  • ?Python?匿名函數(shù)lambda?詳情

    ?Python?匿名函數(shù)lambda?詳情

    這篇文章主要介紹了?Python?匿名函數(shù)lambda,??lambda?????函數(shù)返回函數(shù)本身而不是將其賦值給一個變量名。所以它也被稱為匿名函數(shù),下文更多相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-03-03
  • Python 保持登錄狀態(tài)進(jìn)行接口測試的方法示例

    Python 保持登錄狀態(tài)進(jìn)行接口測試的方法示例

    這篇文章主要介紹了Python 保持登錄狀態(tài)進(jìn)行接口測試的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-08-08
  • 用python將pdf轉(zhuǎn)化為有聲讀物

    用python將pdf轉(zhuǎn)化為有聲讀物

    大家好,本篇文章主要講的用python將pdf轉(zhuǎn)化為有聲讀物,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)

    Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)

    這篇文章主要介紹了Python查看Tensor尺寸及查看數(shù)據(jù)類型的實(shí)現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python如何求取指定范圍內(nèi)的質(zhì)數(shù)

    python如何求取指定范圍內(nèi)的質(zhì)數(shù)

    這篇文章主要介紹了python如何求取指定范圍內(nèi)的質(zhì)數(shù)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評論