首页 > 编程 > Python > 正文

Django框架多表查询实例分析

2020-02-15 22:12:26
字体:
来源:转载
供稿:网友

本文实例讲述了Django框架多表查询。分享给大家供大家参考,具体如下:

多表查询是模型层的重要功能之一, Django提供了一套基于关联字段独特的解决方案.

ForeignKey

来自Django官方文档的模型示例:

from django.db import modelsclass Blog(models.Model):  name = models.CharField(max_length=100)  tagline = models.TextField()class Author(models.Model):  name = models.CharField(max_length=50)  email = models.EmailField()class Entry(models.Model):  blog = models.ForeignKey(Blog)  authors = models.ManyToManyField(Author)  headline = models.CharField(max_length=255)  body_text = models.TextField()  pub_date = models.DateField()  mod_date = models.DateField()  n_comments = models.IntegerField()  n_pingbacks = models.IntegerField()  rating = models.IntegerField()

class ForeignKey

ForeignKey字段接受一个Model类作为参数, 类型与被参照的字段完全相同:

blog = models.ForeignKey(Blog)

ForeignKey.to_field

关联到的关联对象的字段名称。默认地,Django 使用关联对象的主键。

blog = models.ForeignKey(Blog, to_field=Blog.name)

ForeignKey.db_constraint

Django Model的ForeignKey字段的主要功能是维护一个一对多的关系, 以进行关联查询.

只有在db_constraint=True时Django model才会在数据库上建立外键约束, 在该值为False时不建立约束.

默认db_constraint=True.

ForeignKey.related_name

这个名称用于让关联的对象反查到源对象.

如果你不想让Django 创建一个反向关联,请设置related_name 为 '+' 或者以'+' 结尾.

ForeignKey.related_query_nameForeignKey.related_name作为默认值, 两者功能的具体说明请参见相关文档

使用ForeignKey查询

前向查询

若关系模型A包含与模型B关联的关联字段, 模型A的实例可以通过关联字段访问与其关联的模型B的实例:

>>> e = Entry.objects.get(id=2)>>> e.blog # Returns the related Blog object.

修改e.blog并调用save方法存入数据库

>>> e.blog = some_blog>>> e.save()

如果ForeignKey 字段有null=True 设置(即它允许NULL值),可以分配None来删除对应的关联性

>>> e = Entry.objects.get(id=2)>>> e.blog = None>>> e.save() # "UPDATE blog_entry SET blog_id = NULL ...;"

Django提供了一种使用双下划线__的查询语法:

>>> Entry.objects.filter(blog__name='Beatles Blog')

反向查询

被索引的关系模型可以访问所有参照它的模型的实例,如Entry.blog作为Blog的外键,默认情况下

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表