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 subprocess模块学习总结
Mar 13 Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 Python
理解Python中的With语句
Feb 02 Python
Python中的赋值、浅拷贝、深拷贝介绍
Mar 09 Python
使用PDB简单调试Python程序简明指南
Apr 25 Python
使用Python生成XML的方法实例
Mar 21 Python
Python selenium抓取微博内容的示例代码
May 17 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
Oct 14 Python
python sorted方法和列表使用解析
Nov 18 Python
pygame库实现移动底座弹球小游戏
Apr 14 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 伪造本地文件包含漏洞的代码
2011/11/03 PHP
php遍历目录与文件夹的多种方法详解
2013/11/14 PHP
PHP+Ajax验证码验证用户登录
2016/07/20 PHP
Laravel 5.5 实现禁用用户注册示例
2019/10/24 PHP
javascript中利用数组实现的循环队列代码
2010/01/24 Javascript
修改jquery.lazyload.js实现页面延迟载入
2010/12/22 Javascript
js禁止小键盘输入数字功能代码
2011/08/01 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
jquery实现点击向下展开菜单项(伸缩导航)效果
2015/08/22 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
Javascript HTML5 Canvas实现的一个画板
2020/04/12 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
js removeChild 方法深入理解
2016/08/16 Javascript
jQuery fadeOut 异步实例代码详解
2016/08/18 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
js实现一键复制功能
2017/03/16 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
[56:57]LGD vs VP 2019DOTA2国际邀请赛淘汰赛 胜者组赛BO3 第一场 8.20.mp4
2019/08/22 DOTA
Python的__builtin__模块中的一些要点知识
2015/05/02 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
Selenium基于PIL实现拼接滚动截图
2020/04/10 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
精灵市场:Pixie Market
2019/06/18 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
网吧消防安全制度
2014/01/28 职场文书
纪念九一八爱国演讲稿600字
2014/09/14 职场文书
律政俏佳人观后感
2015/06/09 职场文书