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,blank=True,null=True)

    def __unicode__(self):        return self.name
class Asset(models.Model):    """    定义资产信息    """    group = models.ManyToManyField(AssetGroup, blank=True, verbose_name=u"项目名")    env = models.IntegerField(choices=ASSET_ENV, blank=True, null=True, verbose_name=u"运行环境")    ip = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"主机IP")    other_ip = models.CharField(max_length=255, blank=True, null=True, verbose_name=u"联通ip或者云主机ip")    system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"系统版本号")    kernel_version = models.CharField(max_length=32,blank=True,null=True,verbose_name=u‘内核版本信息‘)    ssh_version = models.CharField(max_length=32,blank=True,null=True,verbose_name=u‘ssh版本信息‘)    status = models.IntegerField(choices=ASSET_STATUS, blank=True, null=True, default=1, verbose_name=u"机器状态")    idc = models.ForeignKey(IDC, blank=True, null=True,  on_delete=models.SET_NULL, verbose_name=u‘机房‘)    cpu = models.CharField(max_length=64, blank=True, null=True, verbose_name=u‘CPU‘)    memory = models.CharField(max_length=128, blank=True, null=True, verbose_name=u‘内存‘)    disk = models.CharField(max_length=1024, blank=True, null=True, verbose_name=u‘硬盘‘)    date_added = models.DateTimeField(auto_now=True, null=True)    comment = models.CharField(max_length=128, blank=True, null=True, verbose_name=u"备注")
2.具体操作:当添加了资产和项目的时候,发现这2者并未产生关联,没有对关联表进行任何操作,所以需要对关联表进行操作进行关联在视图里面的操作如下:
Group = AssetGroup.objects.filter(
时间: 2024-10-12 08:30:13

django多对多关联表的操作的相关文章

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中外键关联表的查询随笔

django中,如果一个数据库中的表之间有外键的话可以方便的通过一个表查询到其相关表的数据.如有下面三个model:class Blog(models.Model):    name = models.CharField(max_length=100)    tagline = models.TextField() def __unicode__(self):        return self.name class Author(models.Model):    name = models

django中的 form 表单操作

1. 定义   from django import forms # 定义form   class RegForm(fo rms.Form):    user = forms.CharField(label='用户名')    pwd = forms.CharField(label='密码') 2. 使用   视图中    form_obj = RegForm()    return render(request, 'register2.html', {"form_obj": form

Django中ORM多对多表的操作

自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = models.CharField(max_length=32, null=True) age = models.CharField(max_length=32, null=True) class Teacher(models.Model): name = models.CharField(max_lengt

Django进阶(二)   数据库的ORM操作之多对多

多对多的关系简单来说就是两张表里的数据,每一行都可以对应另外一张表里的多行数据.采用我们在一对多时使用的例子.加入我们放开限制,主机表Host表的数据都有可以有多个管理员.同时反过来HostAdmin表里的每个管理员也同时管理多个主机.代码如下: # coding:utf-8 from __future__ import unicode_literals from django.db import models # Create your models here. class Host(mode

十一 .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

hibernate5(14)注解映射[6]多对多中间表关联

在我们的角色管理系统中,一个用户可以有多种角色,一种角色可以赋予多个用户,显然用户和角色就是典型的多对多关系.又或者博客网站上,用户与文章点赞记录也是一个多对多关系,即一个用户可以点赞多篇文章,一篇文章可以给多个用户点赞等,这时候,我们往往需要附加一些信息,比如授权时间.点赞时间等.在上面两个实例中,都可对应于hibernate多对多映射关系的两种方式,在多对多映射中,我们往往使用中间表来建立关联关系,而且会是双向关联,确保任意一方添加或删除,都可以对中间表进行操作来维护关联关系. 下面我们来看

@ManyToMany 两个表多对多关联

两个表属于多对多关系 如 Teacher <=> Student 表teacher 主键 id 表student 主键id 中间关联表 teacher_student 两个字段 t_id 和 s_id @Entity Student 设置多对多 @ManyToMany(cascade = CascadeType.PERSIST, fetch=FetchType.LAZY) @JoinTable(name="teacher_student",joinColumns={@Joi

django orm 关联表查询

django orm 关联表数据,即sql的多表查询 例如两个表: Apply表中定义了字段position为foreignkey指向job表的id字段, 1.通过job表查找子表apply的字段信息: job.objects.values( 'id', 'job_type', 'apply__date_created') 连接符为小写的子表tablename+双下线+子表字段名即:apply__date_created 表示寻找Apply表中的date_created字段 等价于后台的SQL: