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装饰器使用方法实例
Nov 21 Python
python中pygame模块用法实例
Oct 09 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
Aug 23 Python
常用python编程模板汇总
Feb 12 Python
Python对文件操作知识汇总
May 15 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
Python迭代器模块itertools使用原理解析
Dec 11 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
python 递归相关知识总结
Mar 03 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
Smarty模板快速入门
2007/01/04 PHP
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
实例代码详解javascript实现窗口抖动及qq窗口抖动
2016/01/04 Javascript
JS实现websocket长轮询实时消息提示的效果
2017/10/10 Javascript
AngularJS动态添加数据并删除的实例
2018/02/27 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
微信小程序-可移动菜单的实现过程详解
2019/06/24 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
Vue项目中使用flow做类型检测的方法
2020/03/18 Javascript
Python编写一个优美的下载器
2018/04/15 Python
Python中的Numpy矩阵操作
2018/08/12 Python
python url 参数修改方法
2018/12/26 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
jupyter notebook实现显示行号
2020/04/13 Python
结束运行python的方法
2020/06/16 Python
Python绘制K线图之可视化神器pyecharts的使用
2021/03/02 Python
FILA斐乐中国官方商城:意大利运动品牌
2017/01/25 全球购物
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
涉外离婚协议书怎么写
2014/11/20 职场文书
地震慰问信
2015/02/14 职场文书
工作后的感想
2015/08/07 职场文书
Python字典和列表性能之间的比较
2021/06/07 Python
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL