From 7c2a5f78b3752a47b5f8e9552ec168fea4db82a0 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Wed, 20 Apr 2022 16:30:33 +0800 Subject: [PATCH 1/3] =?UTF-8?q?vode=20=E5=A2=9E=E5=8A=A0=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20=E6=8C=89catory=E5=A4=9A=E5=B1=82=E7=BA=A7?= =?UTF-8?q?=E7=AD=9B=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apps/vod/migrations/0005_video_sort_str.py | 18 ++++++++++++++++++ server/apps/vod/models.py | 1 + server/apps/vod/views.py | 16 ++++++++++++++-- 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 server/apps/vod/migrations/0005_video_sort_str.py diff --git a/server/apps/vod/migrations/0005_video_sort_str.py b/server/apps/vod/migrations/0005_video_sort_str.py new file mode 100644 index 0000000..50f8443 --- /dev/null +++ b/server/apps/vod/migrations/0005_video_sort_str.py @@ -0,0 +1,18 @@ +# Generated by Django 3.0.5 on 2022-04-20 08:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('vod', '0004_auto_20210908_1449'), + ] + + operations = [ + migrations.AddField( + model_name='video', + name='sort_str', + field=models.CharField(blank=True, max_length=10, null=True, verbose_name='排序字符'), + ), + ] diff --git a/server/apps/vod/models.py b/server/apps/vod/models.py index 508aafd..ba65284 100644 --- a/server/apps/vod/models.py +++ b/server/apps/vod/models.py @@ -14,6 +14,7 @@ class Video(CommonAModel): duration = models.IntegerField(verbose_name='时长(秒)', default=0) views = models.IntegerField(verbose_name='观看次数', default=0) viewsp = models.IntegerField(verbose_name='观看人数', default=0) + sort_str = models.CharField('排序字符', max_length=10, null=True, blank=True) class Meta: verbose_name = '点播视频' diff --git a/server/apps/vod/views.py b/server/apps/vod/views.py index b570be7..7d9c2ed 100644 --- a/server/apps/vod/views.py +++ b/server/apps/vod/views.py @@ -1,5 +1,6 @@ from datetime import timedelta from time import timezone +from typing import Dict from rest_framework.mixins import ListModelMixin from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoListDetailSerializer, VideoSerializer from apps.vod.models import Video, ViewRecord @@ -15,6 +16,7 @@ from rest_framework.permissions import IsAuthenticated from rest_framework.status import HTTP_400_BAD_REQUEST from django.utils import timezone from rest_framework.exceptions import ParseError +from utils.queryset import get_child_queryset2 # Create your views here. class ClassView(APIView): @@ -44,14 +46,24 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): perms_map={'get':'video_view', 'post':'video_create', 'put':'video_update', 'delete':'video_delete'} queryset = Video.objects.all() search_fields = ['name', 'category__name', 'description'] - filterset_fields = ['category'] + # filterset_fields = ['category'] serializer_class = VideoSerializer - ordering = ['-views', '-create_time'] + ordering_fields = ['create_time', 'sort_str', 'views', 'viewsp'] + ordering = ['sort_str', '-create_time'] def get_serializer_class(self): if self.action in ['list', 'retrieve']: return VideoListDetailSerializer return super().get_serializer_class() + + def get_queryset(self): + queryset = super().get_queryset() + category = self.request.query_params.get('category', None) + if category: + categorys = get_child_queryset2(Dict.objects.get(pk=category)) + queryset = queryset.filter(category__in=categorys) + return queryset + @action(methods=['get'], detail=False, perms_map={'get':'video_view'}) def myview(self, request, *args, **kwargs): """ From 269f78d9a106c6481c85c999871dba5a25225753 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 21 Apr 2022 08:57:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/vod/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/apps/vod/views.py b/server/apps/vod/views.py index 7d9c2ed..6c7fdf2 100644 --- a/server/apps/vod/views.py +++ b/server/apps/vod/views.py @@ -1,6 +1,6 @@ from datetime import timedelta from time import timezone -from typing import Dict +from apps.system.models import Dict from rest_framework.mixins import ListModelMixin from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoListDetailSerializer, VideoSerializer from apps.vod.models import Video, ViewRecord From 57d91c4873f8ff0e3ed7c0d90844e5028f3bb1a6 Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 21 Apr 2022 09:06:22 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0videoupdateserializer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/apps/vod/serializers.py | 5 +++++ server/apps/vod/views.py | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/server/apps/vod/serializers.py b/server/apps/vod/serializers.py index e09bdcb..c9e6703 100644 --- a/server/apps/vod/serializers.py +++ b/server/apps/vod/serializers.py @@ -8,6 +8,11 @@ class VideoSerializer(serializers.ModelSerializer): model = Video fields = '__all__' +class VideoUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = Video + fields = ['name', 'category', 'description', 'sort_str'] + class VideoListDetailSerializer(serializers.ModelSerializer): class Meta: model = Video diff --git a/server/apps/vod/views.py b/server/apps/vod/views.py index 6c7fdf2..286b59e 100644 --- a/server/apps/vod/views.py +++ b/server/apps/vod/views.py @@ -2,7 +2,7 @@ from datetime import timedelta from time import timezone from apps.system.models import Dict from rest_framework.mixins import ListModelMixin -from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoListDetailSerializer, VideoSerializer +from apps.vod.serializers import VRecordSerializer, VRecordUpdateSerializer, VideoListDetailSerializer, VideoSerializer, VideoUpdateSerializer from apps.vod.models import Video, ViewRecord from django.shortcuts import render from .vodclient import getAllClass, getPlayCode, searchMedia, getSignature @@ -54,6 +54,8 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): def get_serializer_class(self): if self.action in ['list', 'retrieve']: return VideoListDetailSerializer + elif self.action in ['update']: + return VideoUpdateSerializer return super().get_serializer_class() def get_queryset(self):