django 外键model的互相读取方法

yipeiwu_com6年前Python基础

先设定一个关系模型如下:

from django.db import models
class Blog(models.Model):
 name = models.CharField(max_length=100)
 tagline = models.TextField()
 def __str__(self):   
  return self.name
 
class Author(models.Model):
 name = models.CharField(max_length=50)
 email = models.EmailField()
 def __str__(self):   
  return self.name
 
class Entry(models.Model):
 blog = models.ForeignKey(Blog)
 headline = models.CharField(max_length=255)
 body_text = models.TextField()
 authors = models.ManyToManyField(Author)
 def __str__(self):   
  return self.headline

上面的数据关系很明晰,Entry中有Blog和Author的外键,如果要在Entry中读取blog和author的数据很容易:

entry = Entry.objects.all()
for e in entry:
 blog = e.blog
 author = e.authors

要在Blog和Author中读取Entry也可以:

blog = Blog.objects.all()
entry = blog.entry_set.all()
 
author = Author.objects.all()
entry = author.entry_set.all()

下面通过entry使blog和author互相读取,比如要知道一个blog的Author只需如下:

blogs = Blog.objects.all()
for blog in blogs:
 if blog.name== “我们想要查询的博客的name”
  author = blog. entry_set.authors

要查询一个author的所有blog如下:

authors = Author.objects.all()
blogs = []
 
for author in authors:
 if author.name== “我们想要查询的Author的name”
  for entry in author.entry_set.all():
   blogs.append(entry. blog)

以上这篇django 外键model的互相读取方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

Django上线部署之IIS的配置方法

环境: 1 .Windows Server 2016 Datacenter 64位 2 .SQL Server 2016 Enterprise 64位 3 .Python 3.6.0 6...

python 实现图片上传接口开发 并生成可以访问的图片url

python 实现图片上传接口开发 并生成可以访问的图片url

版本:python3.7 功能,开发一个用户访问的页面,支持图片上传,并将其保存在服务器。 项目结构: app.py文件内容如下: from flask import Flask,...

在pycharm中使用git版本管理以及同步github的方法

在pycharm中使用git版本管理以及同步github的方法

注意:首先你电脑必须安装git版本控制器(软件),在官网下载即可。 pycharm中使用git以及github很简单,首先在设置中搜索github: 点击右边的Create API T...

浅述python中深浅拷贝原理

前言 在c++中参数传递有两种形式:值传递和引用传递。这两种方式的区别我不在此说,自行补上,如果你不知道的话。我先上python代码,看完我们总结一下,代码如下: # copy m...

python实现最长公共子序列

python实现最长公共子序列

最长公共子序列python实现,最长公共子序列是动态规划基本题目,下面按照动态规划基本步骤解出来。 1.找出最优解的性质,并刻划其结构特征 序列a共有m个元素,序列b共有n个元素,如果a...