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(集团) >之前访问管理员后台管理页面
在组表中创建组
在用户表中创建用户,组字段选择用户组。
仔细看上面的截的图,会发现一个问题,在在组表中只有组名字段,但是看不到每个组中都有哪些用户。而用户表中可以看到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 ())) >之前
在学习/admin.py文件中加上user_list字段
再次访问管理员后台管理页面,在组表中可以看到user_list信息了。
<强>正向查询:强>
上面我们创建了两张表用户和组,现在我想查询用户表中某个用户的所属组
进入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] .iddjango ManyToManyField多对多关系的实例详解