码迷,mamicode.com
首页 > Web开发 > 详细

Django-website 程序案例系列-7 创建多对多关系表

时间:2017-11-22 20:06:49      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:程序   列表   remove   col   div   protoc   website   move   ati   

创建多对多关系表:

方式一:一共三张表其中有一张中间表需要手工建立(建议使用第一种方式自定制程度高)

class Host(models.Model):
    hostname = models.CharField(max_length=32, db_index=True)
    ip = models.GenericIPAddressField(db_index=True,protocol="ipv4")
    port = models.IntegerField()
    b = models.ForeignKey(‘Business‘, to_field=‘id‘)  


class Application(models.Model):
    name = models.CharField(max_length=32)


class HostToApp(models.Model):        #多对多关系的中间表
    hobj = models.ForeignKey(to=‘Host‘, to_field=‘id‘)
    aobj = models.ForeignKey(to=‘Application‘, to_field=‘id‘)

  

方式二:一共两张表没有中间表,中间表又django自动生成(默认只能生成3列数据,如果需要更多数据就需要使用方式一来建立多对多关系)

class Host(models.Model):
    hostname = models.CharField(max_length=32, db_index=True)
    ip = models.GenericIPAddressField(db_index=True,protocol="ipv4")
    port = models.IntegerField()
    b = models.ForeignKey(‘Business‘, to_field=‘id‘)  


class Application(models.Model):
    name = models.CharField(max_length=32)
    r = models.ManyToManyField("Host")   #建立多对多的关系,django自动生成中间表

#操作第三章表
obj = Application.objects.get(id=1)
obj.r.add(1) #增加第三张表的关系
obj.r.add(2,3)
obj.r.add(*[1,2,3,4])

obj.r.remove(1)      #删除
obj.r.remove(2,3)
obj.r.remove(*[1,2,3])
  
obj.r.clear()        #清空
obj.r.set([3,5,7])     #修改
obj.r.all() #获取所有相关host对象列表(QuerySet)

  

 

Django-website 程序案例系列-7 创建多对多关系表

标签:程序   列表   remove   col   div   protoc   website   move   ati   

原文地址:http://www.cnblogs.com/kuku0223/p/7880601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!