首页 > Web开发 > 详细

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

时间:2017-11-22 19:22:39      阅读:248      评论:0      收藏:0      [点我收藏+]

创建多对多关系表:

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

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 创建多对多关系表

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!