Django的學習進階(一)—— 外鍵的使用


一、描述

在利用django做網絡開發的時候我們會遇到一個問題就是,我們建立了多張數據表,但是多張數據表中的內容是不一樣的,但是之間有着聯系比如:

我有兩張表,一張是記錄歌曲信息的內容,一張是對歌曲操作的內容(下載次數瀏覽次數),如果我在views中對下載次數進行一個排序,但是我不

能只顯示下載次數,我需要歌名的內容,此時我們就需要外鍵來完成這個工作。

                  歌曲的操作次數

                    歌曲信息

二、解決

由於在django中都是使用models.py文件來管理數據庫,再通過views.py進行連接操作,最后用urls.py來映射到網站

1.models.py:

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

我們可以看到利用models.ForeignKey(Song, on_delete=modes.CASCADE, verbose_name='song name')

就可以完成外鍵的設置,第一個參數就是類名,這樣就和歌曲信息關聯在一起了。

 

2.views.py

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

根據上面的信息可以看到在search_song中利用了dynamic_search這個字段來聯系我們遇到的信息內容,將dynamic_search和song的信息連在一起外接字段是song,也可以是其他的連接方式。

 

3.idnex.html:

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

在.html文件中我們使用了在views.py中的對象來引用了song當中的信息,play_hot_song是在views.py中的字段名,進行遍歷的是play_hot.song.song_name,play_hot是遍歷的參數,song是接口的字段名,song_name是外接對象的內容,這樣就可以將信息映射到網站中。

 

三、結果

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM