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 20 Python
基于scrapy的redis安装和配置方法
Jun 13 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
简单瞅瞅Python vars()内置函数的实现
Sep 27 Python
OpenCV+Python--RGB转HSI的实现
Nov 27 Python
利用python3 的pygame模块实现塔防游戏
Dec 30 Python
python orm 框架中sqlalchemy用法实例详解
Feb 02 Python
Python装饰器用法与知识点小结
Mar 09 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
Mar 30 Python
在keras下实现多个模型的融合方式
May 23 Python
Python基于正则表达式实现计算器功能
Jul 13 Python
Python - 10行代码集2000张美女图
May 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
PHP 下载文件时自动添加bom头的方法实例
2014/01/10 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
对table和ul实现js分页示例分享
2014/02/24 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
js 求时间差的实现代码
2016/04/26 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
简单理解vue中track-by属性
2016/10/26 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
jquery Ajax 全局调用封装实例详解
2017/01/16 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
详解vue实现坐标拾取器功能示例
2020/11/18 Vue.js
Python手机号码归属地查询代码
2016/05/04 Python
python3.6使用pymysql连接Mysql数据库
2018/05/25 Python
python爬虫的数据库连接问题【推荐】
2018/06/25 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
Win8.1下安装Python3.6提示0x80240017错误的解决方法
2018/07/31 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
Numpy之reshape()使用详解
2019/12/26 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
canvas生成带二维码海报的踩坑记录
2019/09/11 HTML / CSS
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
Android笔试题总结
2014/11/29 面试题
应届毕业生个人自我评价
2013/09/20 职场文书
竞聘书模板
2014/03/31 职场文书
创先争优活动心得体会
2014/09/04 职场文书
见习报告格式范文
2014/11/08 职场文书
三年级学生评语大全
2014/12/26 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
红色经典观后感
2015/06/18 职场文书
关于保护环境的建议书
2019/06/24 职场文书