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 获取 Linux 系统信息的代码
Jul 13 Python
Python中利用函数装饰器实现备忘功能
Mar 30 Python
python保存字符串到文件的方法
Jul 01 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python机器学习之随机森林(七)
Mar 26 Python
对python sklearn one-hot编码详解
Jul 10 Python
python调用其他文件函数或类的示例
Jul 16 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
pygame实现打字游戏
Feb 19 Python
Django数据库迁移常见使用方法
Nov 12 Python
pandas抽取行列数据的几种方法
Dec 13 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之字符串变相相减的代码
2007/03/19 PHP
PHP开发中常用的三个表单验证函数使用小结
2010/03/03 PHP
PHP Global定义全局变量使用说明
2013/08/15 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
用JQuery模仿淘宝的图片放大镜显示效果
2011/09/15 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
关于JavaScript命名空间的一些心得
2014/06/07 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
JavaScript手机振动API
2016/06/11 Javascript
微信小程序  action-sheet详解及实例代码
2016/11/09 Javascript
JS使用tofixed与round处理数据四舍五入的区别
2017/10/25 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
Vue调用后端java接口的实例代码
2019/10/28 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
antd-日历组件,前后禁止选择,只能选中间一部分的实例
2020/10/29 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
如何在Python中编写并发程序
2016/02/27 Python
python逆序打印各位数字的方法
2018/06/25 Python
python tkinter组件摆放方式详解
2019/09/16 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
2016/01/12 面试题
环境工程毕业生自荐信
2013/11/17 职场文书
大学军训感言
2014/01/10 职场文书
2014春晚主持词
2014/03/25 职场文书
职位说明书范文
2014/05/07 职场文书
离婚协议书范文2014(夫妻感情破裂)
2014/12/14 职场文书
化验室安全管理制度
2015/08/06 职场文书
教学反思怎么写
2016/02/24 职场文书
2019安全宣传标语大全
2019/08/14 职场文书