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中的对象与类型
Dec 11 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
Python中作用域的深入讲解
Dec 10 Python
Python中常用的内置方法
Jan 28 Python
python如何爬取网站数据并进行数据可视化
Jul 08 Python
Python获取excel内容及相关操作代码实例
Aug 10 Python
python递归函数用法详解
Oct 26 Python
python3中编码获取网页的实例方法
Nov 16 Python
Python中生成随机数据安全性、多功能性、用途和速度方面进行比较
Apr 14 Python
Python开发五子棋小游戏
May 02 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
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
无需数据库在线投票调查php代码
2016/07/20 PHP
浅谈PHP中的错误处理和异常处理
2017/02/04 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
JS构建页面的DOM节点结构的实现代码
2011/12/09 Javascript
固定背景实现的背景滚动特效示例分享
2013/05/19 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
使用ionic在首页新闻中应用到的跑马灯效果的实现方法
2017/02/13 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
javaScript中封装的各种写法示例(推荐)
2017/07/03 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
Node.js dgram模块实现UDP通信示例代码
2017/09/26 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
vue 录制视频并压缩视频文件的方法
2018/07/27 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
vue中defineProperty和Proxy的区别详解
2020/11/30 Vue.js
Python简单读取json文件功能示例
2017/11/30 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
python画柱状图--不同颜色并显示数值的方法
2018/12/13 Python
python缩进长度是否统一
2020/08/02 Python
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
税务会计岗位职责
2015/04/02 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python
MySQL存储过程及语法详解
2022/08/05 MySQL