美文网首页
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基础 --- 模型(连表操作)

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