django多对多

创建多对多

方式一:自定义关系表

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

    def __str__(self):
        return self.hostname

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

class HostToApp(models.Model):
    hobj = models.ForeignKey(‘Host‘)
    aobj = models.ForeignKey(‘Application‘)    status = models.CharField(max_length=32)

方式二:自动创建表关系

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

    def __str__(self):
        return self.hostname

class Application(models.Model):
    name = models.CharField(max_length=32)
    r = models.ManyToManyField(to=‘Host‘)

无法直接对第三张表操作
obj = Application.objects.get(id=1)
obj.name
# 对第三张表操作
obj.r.add(1)  #对第三张表添加application_id=1,host_id=1
obj.r.add(2,3)    #对第三张表添加application_id=1,host_id=2;application_id=1,host_id=3
obj.r.add(*[1,2,3])  #对第三张表添加application_id=1,host_id=1;application_id=1,host_id=2;application_id=1,host_id=3

obj.r.remove(1)     #删除第三张表application_id=1,host_id=1
obj.r.remove(2,3)    #删除第三张表application_id=1,host_id=2;application_id=1,host_id=3
obj.r.remove(*[1,2,3]) #删除第三张表application_id=1,host_id=1;application_id=1,host_id=2;application_id=1,host_id=3

obj.r.clear()    #删除第三张表的application_id=1的所有数据

obj.r.set([1,2,3])    #设置第三张表的application_id=1的数据为application_id=1,host_id=1;application_id=1,host_id=2;application_id=1,host_id=3其它数据删除
时间: 2024-10-28 16:09:16

django多对多的相关文章

Django 多对多关系的增删改查

目录 Django多对多数据增删改查 1.表结构及基本方法 2.查 3.增 4.改 Django多对多数据增删改查 1.表结构及基本方法 1.表结构 # models.py class Book(models.Model): author = models.ManyToMany(to='author', relate_name='author') """ ...字段 """ class author(models.Model): "&q

Django多对多的增删改查

Django 多对多 关系 多对多,本意就是多个一对多的关系 定义多对多 ManyToManyField 字段 from django.db import models # 学生类 class Student(models.Model): name = models.CharField(max_length=32) # 老师类 class Teacher(models.Model): name = models.CharField(max_length=32) students = models

Django多对多关系建立及Form组件

目录 Django多对多关系 1.创建方式一全自动 2.创建方式二纯手撸 3.半自动(推荐使用) forms校验组件 使用forms组件实现注册功能 form常用字段和插件 数据校验 钩子函数 HOOK Django多对多关系 1.创建方式一全自动 class Book(models.Model): title = models.CharField(max_length=32) # 多对多关系字段 authors = models.ManyToManyField(to='Authors') cl

django多对多关联表的操作

1.发生背景:在django项目中需要一个项目管理和一个资产管理.就牵涉到多对多的关系,如下: class AssetGroup(models.Model):    GROUP_TYPE = (        ('P','PRIVATE'),        ('A','ASSET')    )    name = models.CharField(max_length=80,unique=True)    comment = models.CharField(max_length=300,bla

django 多对多 增 删 改 查

一.通过url方式实现多对多的:增加,删除,编辑 代码目录: urls.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 """django_one URL Configuration The `urlpatterns` list routes URLs to views. For more informa

django多对多中间表详解

我们都知道对于ManyToMany字段,Django采用的是第三张中间表的方式.通过这第三张表,来关联ManyToMany的双方.下面我们根据一个具体的例子,详细解说中间表的使用. 一.默认中间表 首先,模型是这样的: class Person(models.Model): name = models.CharField(max_length=128) def __str__(self): return self.name class Group(models.Model): name = mo

十一 .Django 多对多表ManyToManyField (ORM)

一. 多对多表ManyToManyField (ORM) https://www.cnblogs.com/yoyoketang/p/10580253.html 1.创建orm表 多对多手动创建第三张关系表联 # 表一 class User(models.Model): username=models.CharField(max_length=24,db_index=True) def __str__(self): return self.username # 表二 class Tag(model

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place

django 学习-10 Django多对多关系模型

1.vim blog/models.py class   Author(models.Model): name = models.CharField(max_length=30) def unicode(self): return self.name class Book(models.Model): name = models.CharField(max_length=30) authors = models.ManyToMany(Author) def unicode(self): retu