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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
浅谈Python数据类型之间的转换
Jun 08 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
python实现俄罗斯方块游戏
Mar 25 Python
pygame库实现俄罗斯方块小游戏
Oct 29 Python
win10安装tensorflow-gpu1.8.0详细完整步骤
Jan 20 Python
python中pandas库中DataFrame对行和列的操作使用方法示例
Jun 14 Python
django表单中的按钮获取数据的实例分析
Jul 31 Python
基于Python爬取京东双十一商品价格曲线
Oct 23 Python
python基于opencv实现人脸识别
Jan 04 Python
python用tkinter开发的扫雷游戏
Jun 01 Python
Python OpenCV之常用滤波器使用详解
Apr 07 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学习 计数器实例代码
2008/06/15 PHP
php array_pop()数组函数将数组最后一个单元弹出(出栈)
2011/07/12 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
JS 动态加载脚本的4种方法
2009/05/05 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
2010/03/09 Javascript
javascript动态加载三
2012/08/22 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
jquery 显示*天*时*分*秒实现时间计时器
2014/05/07 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
jQuery选择器源码解读(七):elementMatcher函数
2015/03/31 Javascript
jquery+正则实现统一的表单验证
2015/09/20 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
Less 安装及基本用法
2018/05/05 Javascript
axios如何取消重复无用的请求详解
2019/12/15 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
python删除文件示例分享
2014/01/28 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
python构建基础的爬虫教学
2018/12/23 Python
Python基本数据结构之字典类型dict用法分析
2019/06/08 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
Python爬虫如何破解JS加密的Cookie
2020/11/19 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
在线服装零售商:SheIn
2016/07/22 全球购物
出门问问全球官方商城:Tichome音箱和TicWatch智能手表
2017/12/02 全球购物
幼儿园大班家长评语
2014/04/17 职场文书
2014幼儿园教师个人工作总结
2014/11/08 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
交通事故代理词范文
2015/05/23 职场文书
Python机器学习之基础概述
2021/05/19 Python
选购到合适的激光打印机
2022/04/21 数码科技