美文网首页
django基础 --- 模型(连表操作)

django基础 --- 模型(连表操作)

作者: 梦想做小猿 | 来源:发表于2016-12-12 18:59 被阅读0次

models.py继续上一篇

from django.db import models

#出版社信息表
class Publisher(models.Model):
    name = models.CharField(max_length=20)
    address = models.CharField(max_length=50)
    city = models.CharField(max_length=60)

    def __unicode__(self):
        return self.name

#作者表
class Auther(models.Model):
    name = models.CharField(max_length=30)
    email = models.EmailField()

    def __unicode__(self):
        return"%s %s"%(self.first_name,self.last_name)

#书籍表
class Books(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Auther)
    publisher = models.ForeignKey(Publisher)

    def __unicode__(self):
        return self.title

一对多 --- 增(ForeignKey)

1.先添加出版社和作者数据

单表添加数据见上一篇文章

书籍表中书籍和出版社是一对多关系,一本书只有一个出版社,一个出版社有多本书

2.添加书籍
添加书籍前,先把出版社查找出来,然后创建对应关系

p = Publisher.objects.get(name="Apress")
Books.objects.create(title="python django",publisher=p)

这里将出版社和书籍创建了关联

多对多 --- 增(manytomany)

书籍和作者间是多对多关系,一本书有多个作者,一个作者有多本书,创建书籍对应关系前,先查找作者,然后添加到书籍作者中

u1 = Auther.objects.get(name="jack")
u2 = Auther.objects.get(name="jones")
b = Books.objects.get(title="python django")
b.authors.add(u1)
b.authors.add(u2)

这里为书籍添加了2个作者

一对多 --- 查

获取某书籍的出版社:

Books.objects.get(title="python django").publisher

获取某出版社的书籍(反查):

Publisher.objects.get(name="Apress").books_set.all()
#或
Books.objects.get(publisher__name="Apress")

多对多 --- 查

获取某书籍的所有作者

Books.objects.get(title="python django").authors.all()

获取书籍的作者名为jack的作者

Books.objects.get(title="python django").authors.filter(name="jack)

查询一个作者的所有书籍(反查)

Auther.objects.get(name="jack").books_set.all()
#或
Books.objects.get(auther__name="jack")

注:在一对多和多对多中,正向查询都是先查询某一个值,然后根据该值得外键去查询对应数据,反向查询先查询需要查询的数据然后使用表名+_set反向关联

相关文章

  • django基础 --- 模型(连表操作)

    models.py继续上一篇 一对多 --- 增(ForeignKey) 1.先添加出版社和作者数据 书籍表中书籍...

  • Django:rest framework补充ContentTy

    ContentType django内置的ContentType组件就是帮我们做连表操作如果一个表与其他表有多个外...

  • django

    django django同步表结构建表修改表数据库操作增删改查 同步表结构 所有操作需要在项目manage.py...

  • Django模型层

    Django模型 一、基础 每个模型都是一个 Python 的类,这些类继承自 django.db.models....

  • Django模型层之单表操作

    添加表纪录 方式1 create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录...

  • Django模型层之建表操作

    一 ORM简介 查询数据层次图解:如果操作mysql,ORM是在pymysq之上又进行了一层封装 MVC或者MTV...

  • Django 模型层 orm 单表操作

    一、ORM用法 1.字段类型: 属性名 = models.字段类型(定义属性时需要指定字段类型, 通过字段类型的参...

  • Django模型(四)

    Django模型 知识点: 表关联对象 多表查询 表关联对象 前向查询 如果一个模型具有ForeignKey,那么...

  • 数据模型操作(1)

    Django操作数据库 -----数据模型MVT:model数据模型部分 1. Django 连接数据库 修改项目...

  • Python学习

    python Django(三) Django单表操作-MySQL 1、创建应用 1.1、添加应用 1.2、修改配...

网友评论

      本文标题:django基础 --- 模型(连表操作)

      本文链接:https://www.haomeiwen.com/subject/ljammttx.html