美文网首页Day-Day-Up
Django中一对多外键使用方法

Django中一对多外键使用方法

作者: az1981cn | 来源:发表于2017-12-08 01:02 被阅读0次

 1.定义数据模型

以出版社、作家、作家信息、书籍四个对象模型为例:

(1)一本书籍只能有一个出版社,此为一对多关系(ForeignKey),主表为出版社,子表为书籍;

(2)一本书可以有多个作者,一个作者可以出多本书,此为多对多关系(ManyToManyField)

(3)作家和作家信息之间是一对一关系,即Author对象和AuthorProfile对象是一一对应的。

from django.db import models

        class Publisher(models.Model):

        name = models.CharField(max_length=30)

        address = models.CharField(max_length=50)

        def __unicode__(self):

                return self.name

class Author(models.Model):

        name = models.CharField("姓名",max_length=30)

        age = models.IntegerField("年龄")

        def __unicode__(self):

                return u'%s' % (self.name)

class AuthorProfile(models.Model):

        # 以下定义一对一关系,即Author对象和AuthorProfile对象是一对一关系

        user = models.OneToOneField(Author, unique=True)

        phone = models.CharField("电话",max_length=20)

        email = models.EmailField("邮箱")

        def __unicode__(self):

                return 'user{}'.format(self.user.name)

class Book(models.Model):

        title = models.CharField(max_length=100)

        # 以下定义多对多关系,Author对象和Book对象是多对多关系

        authors = models.ManyToManyField(Author)

        # 以下定义一对多关系,主表是Publisher,子表是Book,Pulisher对象和Book对象是一对多关系

        publisher = models.ForeignKey(Publisher, related_name="b_set")

        publication_date = models.DateField()

        def __unicode__(self):

                return self.title

注意事项:

(1)OneToOneField,ForeignKey,ManyToManyField都是在子表中声明的;

(2)可以声明related_name作为主表对象访问从表数据的一种方式(以下详述)。

 2.ForeignKey数据访问方式

(1)查找[某出版社]出版的所有书籍【通过主表对象查询从表数据】

# 获取[某出版社]对象

publisher=Publisher.objects.all().filter("筛选某出版社的条件")

#通过[某出版社]主表对象获取所有书籍对象

books = publisher.book_set.all()

注意: django默认每个主表的对象都有一个对应外键的属性,可以通过它来查询属于主表的子表的信息。这个属性的名称默认是以子表的名称小写加上_set()来表示,默认返回的是一个querydict对象,你可以继续根据情况来查询等操作。

有时这么查询会比较麻烦,此时可以在定义主表的外键的时候设定好related_name,用related_name来查询。

# 获取[某出版社]对象

publisher=Publisher.objectsall().filter("筛选某出版社的条件")

#通过[某出版社]主表对象获取所有书籍对象

books = publisher.b_set.all()

(2)查找[某书籍]的出版社【通过从表对象查询主表数据】

假如先得到了一个子表的对象,那只要获取该对象关联主表的外键的属性,就可以得到主表的信息了。

# 获取[某书籍]对象

book=Book.objects.all().filter("筛选某书籍的条件")

#通过[书籍]从表对象获取出版社对象

publisher = book.publisher

相关文章

  • Django中一对多外键使用方法

    1.定义数据模型 以出版社、作家、作家信息、书籍四个对象模型为例: (1)一本书籍只能有一个出版社,此为一对多关系...

  • Django 多表关联

    1. 一对一关联关系 使用方法数据库体现Django程序模型通过外键关联,外键要设在多的一方OneToOneFie...

  • Django Model

    django的模型挺好的,不用自己写SQL。外键,多对多,一对多,多对一。 参考:Django Project

  • django模型中关联关系查询

    写的很乱,写的时候思路不够清晰 django中模型多对多关系 ForeignKey外键约束,在django中是表示...

  • django 2.0外键处理

    Django2.0里model外键和一对一的on_delete参数 在django2.0后,定义外键和一对一关系的...

  • Django模型(三)

    知识要点: 表关系的实现 一对多表关系 在Mysql中一对多是通过外键实现的,在django模型中通过Foreig...

  • Flask-SQLAlchemy不使用外键实现一对多和多对多关系

    不使用外键实现一对多 不使用外键实现多对多

  • 一个模糊的问题,梳理清楚

    django模型中一对多与多对多关系梳理,三天时间慢慢梳理完。 一对多关系即是数据库中外键约束。多对多关系既是数据...

  • 定义和使用模型要点记录

    正在完善中…… 一、定义模型Django丰富的变量类型主键和唯一性​模型之间的关系​ 外键多对多关...

  • django-model外键关系之多对多

    多对多 ManyToManyField用来定义多对多关系多对多在哪个模型中设置ManyToManyField并不重...

网友评论

    本文标题:Django中一对多外键使用方法

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