Django は音楽 Web サイトを実装します ⑷

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)

効果:

 

要約する

バックグラウンドの登録操作を含むテーブル構造の設計と作成はほぼ同じであり、熟練していれば、より多くのテーブルを作成するのは簡単です。

この時点で、データ テーブルの設計と作成は基本的に完了しました。次のステップは、データを追加し、背景の使用を最適化することです。

おすすめ

転載: blog.csdn.net/json_ligege/article/details/132079244