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读取csv文件示例(python操作csv)
Mar 11 Python
用Python从零实现贝叶斯分类器的机器学习的教程
Mar 31 Python
在Python的Flask框架中使用模版的入门教程
Apr 20 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python中Threading用法详解
Dec 27 Python
python绘制热力图heatmap
Mar 23 Python
python进行TCP端口扫描的实现
Dec 21 Python
Django Form and ModelForm的区别与使用
Dec 06 Python
python matplotlib包图像配色方案分享
Mar 14 Python
使用Python实现将多表分批次从数据库导出到Excel
May 15 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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
APMServ使用说明
2006/10/23 PHP
PHP 5.3.0 安装分析心得
2009/08/07 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
php判断文件夹是否存在不存在则创建
2015/04/09 PHP
PHP类的声明与实例化及构造方法与析构方法详解
2016/01/26 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
神奇!js+CSS+DIV实现文字颜色渐变效果
2016/03/16 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
利用JS屏蔽页面中的Enter按键提交表单的方法
2016/11/25 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
javascript实现留言板功能
2020/02/08 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
vant 中van-list的用法说明
2020/11/11 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
python执行外部程序的常用方法小结
2015/03/21 Python
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
python3个性签名设计实现代码
2018/06/19 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
基于python实现音乐播放器代码实例
2020/07/01 Python
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
你所在的项目是如何确定版本号的
2015/12/28 面试题
《手指教学》反思
2014/02/14 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
小学校园广播稿
2015/08/18 职场文书