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修改MP3文件的方法
Jun 15 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
python实时分析日志的一个小脚本分享
May 07 Python
Python基于回溯法子集树模板解决取物搭配问题实例
Sep 02 Python
python实现在遍历列表时,直接对dict元素增加字段的方法
Jan 15 Python
python 实现交换两个列表元素的位置示例
Jun 26 Python
使用TensorFlow对图像进行随机旋转的实现示例
Jan 20 Python
Python实现Word表格转成Excel表格的示例代码
Apr 16 Python
基于python实现matlab filter函数过程详解
Jun 08 Python
使用keras实现Precise, Recall, F1-socre方式
Jun 15 Python
浅谈python中的多态
Jun 15 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 信息采集程序代码
2009/03/17 PHP
PHP+APACHE实现网址伪静态
2015/02/22 PHP
php实现TCP端口检测的方法
2015/04/01 PHP
微信access_token的获取开发示例
2015/04/16 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP常用算法和数据结构示例(必看篇)
2017/03/15 PHP
phpMyAdmin无法登陆的解决方法
2017/04/27 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
js获取checkbox复选框选中的选项实例
2014/08/24 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
深入理解JavaScript中的for循环
2017/02/07 Javascript
如何给element添加一个抽屉组件的方法步骤
2019/07/14 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
vue 实现锚点功能操作
2020/08/10 Javascript
vue实现路由懒加载的3种方法示例
2020/09/01 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
Python导出DBF文件到Excel的方法
2015/07/25 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
Scrapy使用的基本流程与实例讲解
2018/10/21 Python
python打包生成的exe文件运行时提示缺少模块的解决方法
2018/10/31 Python
Python利用matplotlib做图中图及次坐标轴的实例
2019/07/08 Python
Python log模块logging记录打印用法解析
2020/01/20 Python
pyspark 随机森林的实现
2020/04/24 Python
拥有超过850家商店的美国在线派对商店:Party City
2018/10/21 全球购物
留学推荐信怎么写
2014/01/25 职场文书
加拿大探亲邀请信
2014/01/28 职场文书
体育教师自我鉴定
2014/02/12 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
化学教育专业自荐信
2014/07/04 职场文书
政审证明范文
2015/06/19 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫