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

Posted 划得戳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django-website 程序案例系列-7 创建多对多关系表相关的知识,希望对你有一定的参考价值。

创建多对多关系表:

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

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 创建多对多关系表的主要内容,如果未能解决你的问题,请参考以下文章

Django-website 程序案例系列-1 CSRF

Django-website 程序案例系列-8 分页

Django-website 程序案例系列-6 html模板文件详解

Django-website 程序案例系列-16 modle.form(表单验证)

Django-website 程序案例系列-4 ORM数据库操作

Django-website 程序案例系列-15 singnal分析