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文件和目录操作方法大全(含实例)
Mar 12 Python
python实现汉诺塔递归算法经典案例
Mar 01 Python
Python黑帽编程 3.4 跨越VLAN详解
Sep 28 Python
基于python生成器封装的协程类
Mar 20 Python
利用python实现周期财务统计可视化
Aug 25 Python
python SVD压缩图像的实现代码
Nov 05 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
python爬虫工具例举说明
Nov 30 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
Python图像处理之图像拼接
Apr 28 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之生成GIF动画的实现方法
2013/06/07 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
PHP获取一段文本显示点阵宽度和高度的方法
2015/03/12 PHP
MySql数据库查询结果用表格输出PHP代码示例
2015/03/20 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
jquery 3D 标签云示例代码
2014/06/12 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jQuery自定义滚动条完整实例
2016/01/08 Javascript
JavaScript的React Web库的理念剖析及基础上手指南
2016/05/10 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
JS 调试中常见的报错问题解决方法
2017/05/20 Javascript
jquery实现图片放大点击切换
2017/06/06 jQuery
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
微信小程序仿朋友圈发布动态功能
2018/07/15 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
vue使用i18n实现国际化的方法详解
2019/09/05 Javascript
js实现课堂随机点名系统
2019/11/21 Javascript
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
python实现文件快照加密保护的方法
2015/06/30 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
加拿大快时尚零售商:Ardene
2018/02/14 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
《唯一的听众》教学反思
2014/02/20 职场文书
小学生2015教师节演讲稿
2015/03/19 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
python可视化之颜色映射详解
2021/09/15 Python