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定时检查某个进程是否已经关闭的方法
May 20 Python
解决python3在anaconda下安装caffe失败的问题
Jun 15 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
python 多线程中子线程和主线程相互通信方法
Nov 09 Python
Python3爬虫爬取英雄联盟高清桌面壁纸功能示例【基于Scrapy框架】
Dec 05 Python
Python异常处理知识点总结
Feb 18 Python
pandas删除指定行详解
Apr 04 Python
django实现支付宝支付实例讲解
Oct 17 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
Python 如何批量更新已安装的库
May 26 Python
python中数字是否为可变类型
Jul 08 Python
python help函数实例用法
Dec 06 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
安装APACHE
2007/01/15 PHP
php下HTTP Response中的Chunked编码实现方法
2008/11/19 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
2013/12/22 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
php判断两个日期之间相差多少个月份的方法
2015/06/18 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
使用laravel和ECharts实现折线图效果的例子
2019/10/09 PHP
document.all与WEB标准
2020/05/13 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
Jquery 数组操作大全个人总结
2013/11/13 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
js识别不同浏览器基于userAgent做判断
2014/07/29 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
解决vue字符串换行问题(绝对管用)
2020/08/06 Javascript
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
python 中的divmod数字处理函数浅析
2017/10/17 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
2020/02/27 Python
Python装饰器用法与知识点小结
2020/03/09 Python
解决tensorflow读取本地MNITS_data失败的原因
2020/06/22 Python
Keras中的两种模型:Sequential和Model用法
2020/06/27 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
CSS+jQuery+PHP+MySQL实现的在线答题功能
2015/04/25 HTML / CSS
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
台湾森森购物网:U-mall
2017/10/16 全球购物
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
自荐书4要点
2014/01/25 职场文书
毕业生就业意向书
2014/04/01 职场文书
分公司负责人任命书
2014/06/04 职场文书
档案工作汇报材料
2014/08/21 职场文书
安全生产年活动总结
2014/08/29 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
介绍信如何写
2015/01/31 职场文书
留学推荐信怎么写
2015/03/26 职场文书
深入解析NumPy中的Broadcasting广播机制
2021/05/30 Python