Django 外键的使用方法详解


Posted in Python onJuly 19, 2019

一、描述

在利用django做网络开发的时候我们会遇到一个问题就是,我们建立了多张数据表,但是多张数据表中的内容是不一样的,但是之间有着联系比如:

我有两张表,一张是记录歌曲信息的内容,一张是对歌曲操作的内容(下载次数浏览次数),如果我在views中对下载次数进行一个排序,但是我不能只显示下载次数,我需要歌名的内容,此时我们就需要外键来完成这个工作。

歌曲的操作次数

Django 外键的使用方法详解

歌曲信息

Django 外键的使用方法详解

二、解决

由于在django中都是使用models.py文件来管理数据库,再通过views.py进行连接操作,最后用urls.py来映射到网站

1.models.py:

dynamic_id = models.AutoField('serial_num', primary_key=True)
   song = models.ForeignKey(Song, on_delete=models.CASCADE, verbose_name='song name')
   dynamic_plays = models.IntegerField('plays_num')
   dynamic_search = models.IntegerField('search_num')
   dynamic_down = models.IntegerField('down_num')

就可以完成外键的设置,第一个参数就是类名,这样就和歌曲信息关联在一起了。

2.views.py

# hot search songs
  search_song = Dynamic.objects.select_related('song').order_by('dynamic_search').all()[:8]
  # sort songs
  label_list = Label.objects.all()
  # hot songs
  play_hot_song = Dynamic.objects.select_related('song').order_by('dynamic_plays').all()[:10]
  # recommend songs
  daily_recommendation = Song.objects.order_by('song_release').all()[:3]
  # hot search and download
  search_ranking = search_song[:6]
  down_ranking = Dynamic.objects.select_related('song').order_by('dynamic_down').all()[:6]
  all_ranking = [search_ranking, down_ranking]
  return render(request, 'index/test.html', locals())

根据上面的信息可以看到在search_song中利用了dynamic_search这个字段来联系我们遇到的信息内容,将dynamic_search和song的信息连在一起外接字段是song,也可以是其他的连接方式。

3.idnex.html:

<img src="{% static 'image/logo.png' %}">
<br/>
{% for play_hot in play_hot_song %}
{{ play_hot.song.song_name }}
<br/>
{% endfor %}

在.html文件中我们使用了在views.py中的对象来引用了song当中的信息,play_hot_song是在views.py中的字段名,进行遍历的是play_hot.song.song_name,play_hot是遍历的参数,song是接口的字段名,song_name是外接对象的内容,这样就可以将信息映射到网站中。

三、结果

Django 外键的使用方法详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现调用其他python脚本的方法
Oct 05 Python
Python3 socket同步通信简单示例
Jun 07 Python
virtualenv实现多个版本Python共存
Aug 21 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
【python】matplotlib动态显示详解
Apr 11 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
python conda操作方法
Sep 11 Python
Python Process多进程实现过程
Oct 22 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
Pytorch转onnx、torchscript方式
May 25 Python
基于Python实现体育彩票选号器功能代码实例
Sep 16 Python
Python虚拟环境virtualenv是如何使用的
Jun 20 Python
python原类、类的创建过程与方法详解
Jul 19 #Python
Django 全局的static和templates的使用详解
Jul 19 #Python
python之拟合的实现
Jul 19 #Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 #Python
python SVM 线性分类模型的实现
Jul 19 #Python
Django密码系统实现过程详解
Jul 19 #Python
Tensorflow实现酸奶销量预测分析
Jul 19 #Python
You might like
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
Linux+Nginx+MySQL下配置论坛程序Discuz的基本教程
2015/12/23 PHP
PHP获取不了React Native Fecth参数的解决办法
2016/08/26 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
浅谈PHP进程管理
2019/03/08 PHP
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
jquery获取元素值的方法(常见的表单元素)
2013/11/15 Javascript
HTML5+setCutomValidity()函数验证表单实例分享
2015/04/24 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
vue vue-Router默认hash模式修改为history需要做的修改详解
2018/09/13 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
使用Python对Dicom文件进行读取与写入的实现
2020/04/20 Python
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
办理信用卡工作证明
2014/01/11 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
升学宴主持词
2014/04/02 职场文书
小小商店教学反思
2014/04/27 职场文书
国庆65周年演讲稿:回首往昔,展望未来
2014/09/21 职场文书
2015年幼儿园班主任工作总结
2015/05/12 职场文书
美丽的大脚观后感
2015/06/03 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
Python3的进程和线程你了解吗
2022/03/16 Python
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技