django foreignkey外键使用的例子 相当于left join


Posted in Python onAugust 06, 2019

django外键使用 一对一

因为django中处于安全和方便将数据库中的表封装成模型,所以很多sql原生的功能无法使用, 比如 left join,但是我们可以使用外键(foreignkey)来满足表表直接的关系。

设置模型

# 在models.py 中添加
# Person 模型有两个外键, School和Province
# 
class Province(models.Model):
  name = models.CharField('省份', max_length = 10)
  post = models.CharField('邮编', max_length = 10)
  def __str__ (self):#在Python2中用__unicode__替换__str__
    return self.name

# class School_Type(models.Model):
#   school_type = models.CharField('学校类别')

class School(models.Model):
  id = models.IntegerField('学校编号', primary_key=True)
  name = models.CharField('学校名称', max_length=200)
  address = models.CharField('学校地址', max_length=200)

  def __str__ (self):#在Python2中用__unicode__替换__str__
    return self.name




class Person(models.Model):
  name = models.CharField('姓名', max_length=50)
  age = models.IntegerField('年龄')
  address = models.CharField('地址', max_length=100)
  email = models.EmailField('电子邮件')
  school = models.ForeignKey(School, on_delete=models.CASCADE)
  province = models.ForeignKey(Province, on_delete = models.CASCADE)

设置 ModelForm

因为Form的字段跟model的字段相同,所以我们直接使用 ModelForm, 使用ModelForm时外键会以 ChoiceField 字段来显示, 显示为 str()返回的字段

# 因为Form的字段跟model的字段相同,所以我们直接使用 ModelForm

class PersonForm(ModelForm):
  class Meta:
    model = Person
    fields = '__all__'

保存

views.py 中的view,可以直接使用 form.save() 来保存form

def person(request):
  if request.POST:
    form = PersonForm(request.POST)

    if form.is_valid():
      p = form.save()
      return HttpResponse(request, 'success')
    else:
      return HttpResponse(request, 'fail')
  else:
    form = PersonForm()
    person_list = Person.objects.all()
    # school_list = person_list.School_set.all()
    return render(request, 'person.html', locals())

模版 person.html

可以在模版中使用 person.外键字段.外键表属性 来显示数据,比如 person.school.province.post

{% extends 'base.html' %}

{% block content %}

  <form action="." method="POST">
  {% csrf_token %}
  {{ form }}
  <input type="submit" value='submit' />

  </form>

{#  #}
  {% for person in person_list %}

  <p>name:{{ person.name }}; age: {{ person.age }}; school:{{ person.school}}
     {{ person.province.post }}
  </p>
{% endfor %}
{#  {{ school_list }}#}

{% endblock %}

以上这篇django foreignkey外键使用的例子 相当于left join就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python代码检查工具pylint 让你的python更规范
Sep 05 Python
Python基于twisted实现简单的web服务器
Sep 29 Python
Python中super关键字用法实例分析
May 28 Python
Python3 socket同步通信简单示例
Jun 07 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
Pandas-Cookbook 时间戳处理方式
Dec 07 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Django前后端分离csrf token获取方式
Dec 25 Python
全网最细 Python 格式化输出用法讲解(推荐)
Jan 18 Python
Python中np.random.randint()参数详解及用法实例
Sep 23 Python
Python Django简单实现session登录注销过程详解
Aug 06 #Python
Django框架中序列化和反序列化的例子
Aug 06 #Python
python异常触发及自定义异常类解析
Aug 06 #Python
Python DataFrame一列拆成多列以及一行拆成多行
Aug 06 #Python
Django中reverse反转并且传递参数的方法
Aug 06 #Python
matplotlib命令与格式之tick坐标轴日期格式(设置日期主副刻度)
Aug 06 #Python
python+openCV调用摄像头拍摄和处理图片的实现
Aug 06 #Python
You might like
discuz安全提问算法
2007/06/06 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
PHP计算一年多少个星期和每周的开始和结束日期
2014/07/01 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
PHP实现WebService的简单示例和实现步骤
2015/03/27 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
Python内置数据类型详解
2014/08/18 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python根据出生年份简单计算生肖的方法
2015/03/27 Python
Python编写百度贴吧的简单爬虫
2015/04/02 Python
Python计算一个文件里字数的方法
2015/06/15 Python
python实现关键词提取的示例讲解
2018/04/28 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
HTML5移动端开发中的Viewport标签及相关CSS用法解析
2016/04/15 HTML / CSS
个人考核材料
2014/05/15 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
简单实现一个手持弹幕功能+文字抖动特效
2021/03/31 HTML / CSS
人工智能深度学习OpenAI baselines的使用方法
2022/05/20 Python
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS