django ManyToManyField多对多关系的实例详解

  

Django的ORM有多种关系:一对一,多对一,多对多

  

<强>各自定义的方式为:

  

一对一:>   #编码:utf8   django。数据库导入模型      类集团(models.Model):   Name=models.CharField (max_length=20)   def __unicode__(自我):   返回self.Name         类用户(models.Model):   Name=models.CharField (max_length=20)   电子邮件=models.CharField (max_length=50)   组=models.ManyToManyField(组、空白=True)   def __unicode__(自我):   返回self.Name   def group_list(自我):   ',' . join([我返回。名字我self.group.all ()))   之前      

创建两张表组和用户组表中只有组名“名称”这一个字段。而用户表中有用户名“名字”,邮箱“电子邮件”,组名“集团”三个字段。

  

在用户表中,由于集团信息与组表关联的,所以要在用户表中设置

        ManyToManyField            def group_list(自我):   ',' . join([我返回。名字我在self.group.all ()])      

定义group_list函数,是为了在后台页面中显示group_list字段信息.group_list是后台页面显示的字段名称。

        我。名字我在self.group.all ()      

这里的名字是组表中名字的字段,self.group中的组是用户表自己的组字段

  

mysite/admin.py文件中的代码

        django。contrib进口管理   从学习。模型导入*   #这里登记您的模型。      类UserAdmin (admin.ModelAdmin):   按照list_display=[“id”、“名称”,“电子邮件”、“group_list”)   UserAdmin admin.site.register(用户)      类GroupAdmin (admin.ModelAdmin):   按照list_display=(“id”,“名字”)   GroupAdmin admin.site.register(集团)   之前      

访问管理员后台管理页面

  

在组表中创建组

  

 django ManyToManyField多对多关系的实例详解

  

在用户表中创建用户,组字段选择用户组。

  

 django ManyToManyField多对多关系的实例详解

  

 django ManyToManyField多对多关系的实例详解

  

仔细看上面的截的图,会发现一个问题,在在组表中只有组名字段,但是看不到每个组中都有哪些用户。而用户表中可以看到group_list字段,所以如果希望在集团中显示用户信息,可以仿照用户表的做法,mysite/学习/models.py文件代码

        #编码:utf8   django。数据库导入模型      类集团(models.Model):   Name=models.CharField (max_length=20)   def user_list(自我):   ',' . join([我返回。名字我self.user_set.all ()))   def __unicode__(自我):   返回self.Name   类用户(models.Model):   Name=models.CharField (max_length=20)   电子邮件=models.CharField (max_length=50)   组=models.ManyToManyField(组、空白=True)   def __unicode__(自我):   返回self.Name   def group_list(自我):   ',' . join([我返回。名字我self.group.all ()))   之前      

 django ManyToManyField多对多关系的实例详解

  

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

  

 django ManyToManyField多对多关系的实例详解

  

再次访问管理员后台管理页面,在组表中可以看到user_list信息了。

  

 django ManyToManyField多对多关系的实例详解

  

  

<强>正向查询:

  

上面我们创建了两张表用户和组,现在我想查询用户表中某个用户的所属组

  

进入django壳命令行

        python管理。py壳            在在在从学习。模型导入*   在在在User.objects.all ()   [& lt;用户:老黄祝辞,& lt;用户:老张祝辞,& lt;用户:老王祝辞]   在在在User.objects.all () [0]   & lt;用户:老黄的在   在在在[0].Email User.objects.all ()   u 'laohuang@qq.com '   在在在User.objects.all () [0] .group.all ()   [& lt;组:CEO> & lt;组:COO>】   在在在User.objects.all () [0] .group.all () [0] . name   u 'CEO '   在在在User.objects.all () [0] .group.all () [0] .id

django ManyToManyField多对多关系的实例详解