美文网首页
Django-关系映射

Django-关系映射

作者: 遇明不散 | 来源:发表于2019-05-17 13:58 被阅读0次

关系映射

一对一映射
语法
# 在关联的两个类中的任何一个类中
# 不需要反向引用
属性 = models.OneToOneField(Entry)

class Author(models.Model):
    .... ....
class Wife(models.Model):
    .... ....
    # 增加对Author的一对一引用
    author = models.OneToOneField(Author)

# 在数据库中,生成一个外键(author_id)列在 wife 表中,要引用自 author 表中的主键 
# 在 Author 的实体中,增加一个隐式属性叫 wife 
查询
# 正向查询:直接通过关联属性查询即可
# 通过 wife 找 author
wife = Wife.objects.get(id=1)
author = wife.author

# 反向查询:通过反向引用属性查询
# 通过 author 找 wife
author = Author.objects.get(id=1)
wife = author.wife
一对多映射
语法
# 在"多"实体中增加对"一"实体的引用
属性 = models.ForeignKey(Entry)

class Publisher(models.Model):
    .... ....
class Book(models.Model):
    .... ....
    publisher = models.ForeignKey(Publisher)
查询
# 正向查询
# 通过Book查询Publisher
book = Book.objects.get(id=1)
publisher = book.publisher

# Django默认会在Publisher中增加book_set属性,来表示对应的所有书籍的查询对象
pub = Publisher.objects.get(id=1)
books = pub.book_set.all()
多对多映射
语法
# 在关联的两个类的任意一个类中
属性 = models.ManyToManyField(Entry)

class Author(models.Model):
    .... ....

class Book(models.Model):
    .... ....
    authors = models.ManyToManyField(Author)
查询
# 正向查询
# 通过 Book 查询 Author
# authors 属性只是提供了对关联表的一个查询引用
# 使用all(),values()等方法获取最终数据
book = Book.objects.get(id=1)
authors = book.authors.all()

# 反向查询
author = Author.objects.get(id=1)
books = author.book_set.all()

自定义查询对象

# 声明类 EntryManager 继承自 models.Manager
# 允许在 EntryManager 中添加自定义函数
class EntryManager(models.Manager):
    def 函数名(self,自定义参数列表):
        ... ...
        return ... ...

# 使用 EntryManager 覆盖 Models类中原有的 objects
class Entry(models.Model):
    objects = EntryManager()
    name = models.CharField(xxxx)

相关文章

网友评论

      本文标题:Django-关系映射

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