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搭建Django应用程序步骤及版本冲突问题解决
Nov 19 Python
python通过邮件服务器端口发送邮件的方法
Apr 30 Python
Python使用matplotlib绘制动画的方法
May 20 Python
Python安装使用命令行交互模块pexpect的基础教程
May 12 Python
python读写json文件的简单实现
Apr 11 Python
python分割列表(list)的方法示例
May 07 Python
Python基于回溯法子集树模板解决m着色问题示例
Sep 07 Python
详解Python最长公共子串和最长公共子序列的实现
Jul 07 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
Sep 26 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
Symfony2中被遗弃的getRequest()方法分析
2016/03/17 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
javascript firefox不显示本地预览图片问题的解决方法
2008/11/12 Javascript
js 跨域和ajax 跨域问题小结
2009/07/01 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
javascript 判断整数方法分享
2014/12/16 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
微信小程序 登陆流程详细介绍
2017/01/17 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python中利用Future对象异步返回结果示例代码
2017/09/07 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
为什么是 Python -m
2020/06/19 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
初中班主任评语大全
2014/04/24 职场文书
理想演讲稿范文
2014/05/21 职场文书
新书发布会策划方案
2014/06/09 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
西岭雪山导游词
2015/02/06 职场文书
2015年销售助理工作总结
2015/05/11 职场文书