django foreignkey外键使用的例子 相当于left join
作者:探索者v 发布时间:2021-04-17 15:52:33
标签:django,foreignkey,外键
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 %}
来源:https://blog.csdn.net/tanzuozhev/article/details/50463498


猜你喜欢
- 在开发应用程序时,客户端(前端页面或APP)与服务端交互是在所难免的,在交互过程传递数据时,最通用和流行格式便是JSON,Go语言提供了en
- 你好,一般情况下,Ctrl+C 是最简单的方法,当无法 Ctrl+C 时,我们借助于 Python,以下是具体步骤:第一步,安装工具库1、t
- 第一步:首先定义一个视图函数,用于提供数据,实现每页显示数据个数,返回每页请求数据from django.shortcuts import
- 创建列表sample_list = ['a',1,('a','b')]Python 列表操作
- 目录当前时间实例1:实例2:指定时间戳实例1:实例2:总结我们将会启用到time库:当前时间实例1:import time# 获得当前时间时
- SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为:在执行增删改语句(产生事务日志)的过程中提示,The tr
- 这篇文章主要介绍了python匿名函数lambda原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 几个星期前,SQL Server 2016的最新CTP版本已经发布了:CTP 2.4(目前已经是CTP 3.0)。这个预览版相比以前的CTP
- SQLite 的 AUTOINCREMENT 是一个关键字,用于表中的字段值自动递增。我们可以在创建表时在特定的列名称上使用 AUTOINC
- 1.添加自定义机器人2.编写python代码请求钉钉机器人所给的webhook钉钉自定义机器人官方文档安全方式使用加签的方式:第一步,把ti
- 一、函数概述简单来说 函数 就是自己定义的一段 小程序 方便自己调取使用def 用来定义函数的关键字 也就是这个函数的名字函数运行到retu
- 特别是linux系统,装了多个python,有时候找不到python的绝对路径,有时候装了个django,又找不到django安装到哪里了。
- 1.PyQtGraph简介:pyqtgraph的主要用途:1、为数据、绘图、视频等提供快速、可交互图形显示。2、提供快速开发应用的工具。2.
- 背景:做任务领金币的过程很无聊,而且每天都是重复同样的工作,非常符合自动化的定义;工具:python,appium,Android 手机(我
- Oracle数据库作为大型数据库管理系统,近年来一直占有世界上高端数据库的最大份额,其强大而完善的数据库管理功能,以及ORACLE公司推陈出
- Semantics可翻译为语义的(学),它是Html/Xhtml是否真正符合标准的重要一环。Jorux在这和大家讨论一些自己的观点,如有不妥
- Python最近挺火呀,比鹿晗薛之谦还要火,当然是在程序员之间。下面我们看看有关Python的相关内容。上一篇文章我们已经介绍了部分Pyth
- 本文实例讲述了Python常用特殊方法。分享给大家供大家参考,具体如下:1 __init__和__new____init__方法用来初始化类
- 如下所示:a = [0, 1, 2, 3, 4, 0, 2, 3, 6, 7, 5]selected = [x for x in a if
- 本文为大家分享了python实现俄罗斯方块游戏的具体代码,供大家参考,具体内容如下Github:Tetris代码:# -*- coding: