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深入学习之内存管理
Aug 31 Python
复习Python中的字符串知识点
Apr 14 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
不同版本中Python matplotlib.pyplot.draw()界面绘制异常问题的解决
Sep 24 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
python使用参数对嵌套字典进行取值的方法
Apr 26 Python
利用PyCharm Profile分析异步爬虫效率详解
May 08 Python
解决django model修改添加字段报错的问题
Nov 18 Python
Django 自定义分页器的实现代码
Nov 24 Python
Python如何实现的二分查找算法
May 27 Python
python用tkinter开发的扫雷游戏
Jun 01 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编写和读取XML的几种方式
2013/01/12 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
php检测图片主要颜色的方法
2015/07/01 PHP
PHP判断表达式中括号是否匹配的简单实例
2016/10/22 PHP
用javascript实现画板的代码
2007/09/05 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
Vue通过URL传参如何控制全局console.log的开关详解
2017/12/07 Javascript
在vue中对数组值变化的监听与重新响应渲染操作
2020/07/17 Javascript
JavaScript中ES6规范中let和const的用法和区别
2020/08/06 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
俄罗斯第一家篮球店:StreetBall
2020/07/30 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
大学总结自我鉴定
2014/01/18 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
聚美优品陈欧广告词
2014/03/14 职场文书
企业法人授权委托书
2014/04/03 职场文书
应聘销售主管的求职信
2014/04/26 职场文书
商务英语专业毕业生求职信
2014/07/06 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
新教师2015年度工作总结
2015/07/22 职场文书
六一儿童节致辞
2015/07/31 职场文书
2016教师学习党章心得体会
2016/01/15 职场文书