当前位置:首页 > 编程教程 > Python技术文章 > Django 外键的使用方法详解

Django中如何使用外键

  • 发布时间:
  • 作者:码农之家
  • 点击:135

这篇文章主要知识点是关于django、外键、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Keras快速上手:基于Python的深度学习实战
  • 类型:Python大小:41.4 MB格式:PDF作者:谢梁
立即下载

Tags:Django 外键 

Django 外键的使用方法详解

一、描述

在利用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 外键的使用方法详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

Python 相关电子书
学习笔记
网友NO.674703

Django Admin 实现外键过滤的方法

说明和 Model 环境: ➜ pythonPython 3.6.3 |Anaconda custom (x86_64)| (default, Oct 6 2017, 12:04:38)[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwinType "help", "copyright", "credits" or "license" for more information. import django print(django.get_version())2.0.1 2018年05月23日更新: 可以通过get_changeform_initial_data 函数来传递initial参数. # admin.py@admin.register(Score)class ScoreConfigAdmin(FilterUserAdmin): # fields = ('id','name') form = ScoreConfigAdminForm def get_changeform_initial_data(self, request): initial = super().get_changeform_initial_data(request) initial.update({'uid': request.user.id}) return initial# forms.pyclass ScoreConfigAdminForm(forms.ModelForm): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) if not kwargs.get('initial'): return self.uid = kwargs.get('initial').get('uid') class Meta: model = Score fields = '__all__' 有一个支持多用户(使用 django admin)的 Blog,每一篇 Pos……

网友NO.548018

Django Mode的外键自关联和引用未定义的Model方法详解

Django Model的外键自关联 在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Department)的Model,它有一个字段是上级部门(super_department),上级部门应该是一个外键并引用Model Department,即: class Department(models.Model): some other filed super_department = models.ForeignKey(Department) 但是这样的定义对于python来说是不允许的,因为在定义Field super_department时,Department定义还未完成,python会提示你Department未定义,那么怎么办呢?放心吧,django已经为你考虑好这种情况了,只需要在定义时将ForeignKey所引用的Model改为self即可,即: class Department(models.Model): some other filed super_department = models.ForeignKey(self) 然后同步models至数据库时就会生成一个引用自己的外键。 Django Model之引用一个未定义的Model 有时在django的Model定义中,会出现引用一个未定义Model的情况,比……

网友NO.857558

django admin.py 外键,反向查询的实例

如下所示: class OrderAdmin(admin.ModelAdmin): list_display = ( '_nick_name', 'time_order', 'year', 'item', 'status', 'number', 'money', 'deduction_point', 'deduction_account', 'pay', '_open_id', 'out_trade_no', ) search_fields = [ 'user__nick_name', 'user__wechatuser__open_id', 'out_trade_no'] list_filter = ('year', 'item', 'status') def _nick_name(self, obj): return obj.user.nick_name def _open_id(self, obj): return obj.user.wechatuser.open_id list_display中如果查询外键, 需要自己写方法.例如上面代码中的_nick_name和_open_id search_fields中可以直接用外键的形式直接访问 以上这篇django admin.py 外键,反向查询的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

网友NO.909368

对Django外键关系的描述

注:本文需要你有一定的数据库知识,本文的数据库语法使用mysql书写 Django中,跟外键有关的关系有三种,下面来一一介绍。 OneToManyField 这种最好理解,说白了就是最普通的外键,看看下面两个模型: class GoodsType(models.Model): name = models.CharField(max_length=50)class GoodsMessage(models.Model): Title = models.CharField(max_length='100') # 商品标题 Category = models.ManyToManyField(GoodsType) # 商品标签 分析一下: 这里Django会在数据库中创两张表: create table GoodsType( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, PRIMARY KEY (`id`))create table GoodsMessage( `id` int(11) NOT NULL AUTO_INCREMENT, `Title` varchar(50) NOT NULL, `Category_id` int(11) NOT NULL, PRIMARY KEY (`id`), FOREIGN KEY (`Category_id`) REFERENCES `SchoolBuy_goodstype` (`id`)) 这样的结果就是一个商品会对应一个类别,即类别是商品的外键。 OneToOneField 这种关系和OneToMan……

<
1
>

电子书 编程教程 PC软件下载 安卓软件下载

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757