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

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反向关联

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ORM 映射关系:表名 <-------> 类名字段 <-------> 属性表记录 <------->类实例...
    lkning阅读 537评论 0 0
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,308评论 25 708
  • 目录 models.py文件内容如下 以下所有查询及操作均基于此models.py实现 一、 基于对象的跨表查询 ...
    CaiGuangyin阅读 1,219评论 0 3
  • 小罗庄的冬天干瘪萧瑟。 大国妈像经年被雨雪浸泡,又被风干的树叶,蜷缩在冲村口的草垛上晒太阳。 生活就像这四九天,本...
    小洁w阅读 574评论 0 2
  • 你的善良不想伤害任何一个人,正因为这样你也伤害了所有人,甚至包括你自己! 只顾着心疼别人,而忘了心疼自己,为了谁破...
    季珊嘻嘻阅读 337评论 5 2

友情链接更多精彩内容