Python Django フレームワークを使用して音楽 Web サイトを作成し、シリーズ 3 をベースに開発を続け、
この記事では主にBGM曲タイプテーブルと曲リストテーブルモジュールの機能開発について説明します。
目次
テーブル構造設計
曲ジャンルテーブルの構造
分野 |
タイプ |
注記 |
ID |
int(11) |
自己インクリメントID |
名前 |
varchar(100) |
プレイリスト名 |
ピド |
int(11) |
親タイプ ID 0 は親タイプを示します |
プレイリストの構造
分野 |
タイプ |
注記 |
ID |
int(11) |
|
名前 |
varchar(100) |
プレイリスト名 |
カバー |
varchar(100) |
カバーパス |
プレイナム |
int(11) |
再生音量 |
追加時間 |
int(11) |
時間を追加する |
更新時間 |
int(11) |
更新時間 |
テーブルモデルの作成
または、player/models.py に追加します。楽曲リストテーブルとジャンルテーブルとは多対多の関係にあり、中間テーブルを作成する必要はない。
リレーションシップを宣言するだけで、django が対応する中間テーブルを自動的に作成します。
内容は以下の通りです。
class SongCategory(models.Model):
""" 歌曲类型表 """
name = models.CharField(max_length=100, help_text='请输入类型名称')
pid = models.IntegerField(default=0, help_text='父类型id')
class SongSheet(models.Model):
""" 歌单表 """
name = models.CharField(max_length=100, help_text='请输入歌单名称')
cover = models.ImageField(upload_to=upload_save_path, help_text='请上传歌单封面图')
playnum = models.IntegerField(default=0, help_text='请输入播放量')
addtime = models.DateTimeField(auto_now_add=True)
updatetime = models.DateTimeField(auto_now=True)
# 歌曲类型与歌单表 多对多关系
category = models.ManyToManyField('SongCategory')
# 歌单表与单曲表多对多关系
singe = models.ManyToManyField('Singe')
注: 入力ボックスは、choices パラメータを使用してドロップダウン メニューに変更できます。
テーブルを作成する
python manage.py makemigrations
python manage.py migrate
ソングタイプテーブル、ソングリストテーブル、ソングリストタイプテーブル、ソングリストシングルテーブルの4つのテーブルを作成しました。
ソングタイプテーブルとソングリストテーブルの構造はテーブル構造設計と同じであり、今後は表示されません。
中間テーブルの構造は次のとおりです。
CREATE TABLE `player_songsheet_singe` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`songsheet_id` bigint(20) NOT NULL,
`singe_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `player_songsheet_singe_songsheet_id_singe_id_78f26d1c_uniq` (`songsheet_id`,`singe_id`),
KEY `player_songsheet_singe_songsheet_id_2375e76e` (`songsheet_id`),
KEY `player_songsheet_singe_singe_id_022e51d3` (`singe_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
CREATE TABLE `player_songsheet_category` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`songsheet_id` bigint(20) NOT NULL,
`songcategory_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `player_songsheet_categor_songsheet_id_songcategor_d9f0af95_uniq` (`songsheet_id`,`songcategory_id`),
KEY `player_songsheet_category_songsheet_id_80b16cc8` (`songsheet_id`),
KEY `player_songsheet_category_songcategory_id_397ab572` (`songcategory_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
中間テーブルのフィールド関係が設計と一致しており、対応するインデックスが作成されていることがわかります。
バックグラウンドレジストリモデル
player/admin.pyで操作します。
テーブルモデルをインポートする
from .models import SongCategory, SongSheet
背景のカスタマイズ
デフォルトの表示、フィルター、検索、ページネーションを変更します。
class SongCategoryAdmin(admin.ModelAdmin):
def get_name(self):
return self.name
get_name.short_description = '类型名称'
def get_pid(self):
return self.pid
get_pid.short_description = '类型父id'
# 显示字段
list_display = ['id', get_name, get_pid]
# 过滤器
list_filter = ['name']
# 搜索
search_fields = ['name']
# 分页
list_per_page = 10
class SongSheetAdmin(admin.ModelAdmin):
def get_name(self):
return self.name
get_name.short_description = '类型名称'
def get_cover(self):
return self.cover
get_cover.short_description = '歌单封面'
def get_addtime(self):
return self.addtime
get_addtime.short_description = '创建时间'
def get_updatetime(self):
return self.updatetime
# 显示字段
list_display = ['id', get_name, get_cover]
# 过滤器
list_filter = ['name']
# 搜索
search_fields = ['name']
# 分页
list_per_page = 10
admin.site.register(SongCategory, SongCategoryAdmin)
admin.site.register(SongSheet, SongSheetAdmin)
効果:
要約する
バックグラウンドの登録操作を含むテーブル構造の設計と作成はほぼ同じであり、熟練していれば、より多くのテーブルを作成するのは簡単です。
この時点で、データ テーブルの設計と作成は基本的に完了しました。次のステップは、データを追加し、背景の使用を最適化することです。