From 6d3e304359c5e26d6bd58787ea1030e284b4609e Mon Sep 17 00:00:00 2001 From: caoqianming Date: Thu, 17 Nov 2022 09:50:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0category=20big?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vod/migrations/0009_auto_20221117_0941.py | 25 +++++++++++++++++++ server/apps/vod/models.py | 3 ++- server/apps/vod/serializers.py | 14 +++++++++++ server/apps/vod/views.py | 9 +++++++ server/utils/model.py | 5 ++-- 5 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 server/apps/vod/migrations/0009_auto_20221117_0941.py diff --git a/server/apps/vod/migrations/0009_auto_20221117_0941.py b/server/apps/vod/migrations/0009_auto_20221117_0941.py new file mode 100644 index 0000000..5c726c0 --- /dev/null +++ b/server/apps/vod/migrations/0009_auto_20221117_0941.py @@ -0,0 +1,25 @@ +# Generated by Django 3.0.5 on 2022-11-17 01:41 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0022_delete_historicaldict'), + ('vod', '0008_auto_20221116_1453'), + ] + + operations = [ + migrations.AddField( + model_name='video', + name='category_big', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_catebig', to='system.Dict', verbose_name='视频大类'), + ), + migrations.AlterField( + model_name='video', + name='category', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='video_cate', to='system.Dict', verbose_name='视频分类'), + ), + ] diff --git a/server/apps/vod/models.py b/server/apps/vod/models.py index 97c3afb..76b5c24 100644 --- a/server/apps/vod/models.py +++ b/server/apps/vod/models.py @@ -7,7 +7,8 @@ from apps.system.models import User, CommonAModel, Dict class Video(CommonAModel): name = models.CharField(verbose_name='视频名称', max_length=100) - category = models.ForeignKey(Dict, verbose_name='视频分类', on_delete=models.DO_NOTHING) + category_big = models.ForeignKey(Dict, verbose_name='视频大类', on_delete=models.SET_NULL, null=True, blank=True, related_name='video_catebig') + category = models.ForeignKey(Dict, verbose_name='视频分类', on_delete=models.SET_NULL, null=True, blank=True, related_name='video_cate') description = models.TextField(verbose_name='视频描述', default='') fileid = models.CharField(verbose_name='云点播视频id', unique=True, max_length=200) mediaurl = models.CharField(verbose_name='视频地址', max_length=200) diff --git a/server/apps/vod/serializers.py b/server/apps/vod/serializers.py index ed51292..6cb4156 100644 --- a/server/apps/vod/serializers.py +++ b/server/apps/vod/serializers.py @@ -10,6 +10,11 @@ class VideoSerializer(serializers.ModelSerializer): def create(self, validated_data): video = super().create(validated_data) + cate = video.category + video.category_big = cate + if cate.pid: + video.category_big = cate.pid + video.save() View1.objects.get_or_create(video=video, defaults={'video': video}) return video @@ -17,6 +22,15 @@ class VideoUpdateSerializer(serializers.ModelSerializer): class Meta: model = Video fields = ['name', 'category', 'description', 'sort_str'] + + def update(self, instance, validated_data): + video = super().update(instance, validated_data) + cate = video.category + video.category_big = cate + if cate.pid: + video.category_big = cate.pid + video.save() + return video class VideoListDetailSerializer(serializers.ModelSerializer): views_n = serializers.IntegerField(source='view1_video.views', read_only=True, label="总观看次数") diff --git a/server/apps/vod/views.py b/server/apps/vod/views.py index ddd7240..c752a52 100644 --- a/server/apps/vod/views.py +++ b/server/apps/vod/views.py @@ -107,6 +107,15 @@ class VideoViewSet(PageOrNot, CreateUpdateModelAMixin, ModelViewSet): cal_view1(vi) return Response({"vi": vi.id}) + @action(methods=['get'], detail=False, perms_map={'get':'*'}) + def correct_cate(self, request, *args, **kwargs): + for video in Video.objects.get_queryset(all=True).all(): + cate = video.category + video.category_big = cate + if cate.pid: + video.category_big = cate.pid + video.save() + return Response() def cal_view1(vi: ViewItem): """ diff --git a/server/utils/model.py b/server/utils/model.py index c6ba63b..ff59a73 100644 --- a/server/utils/model.py +++ b/server/utils/model.py @@ -33,14 +33,15 @@ class SoftDeletableManagerMixin(object): ''' _queryset_class = SoftDeletableQuerySet - def get_queryset(self): + def get_queryset(self, all=False): ''' Return queryset limited to not deleted entries. ''' kwargs = {'model': self.model, 'using': self._db} if hasattr(self, '_hints'): kwargs['hints'] = self._hints - + if all: + return self._queryset_class(**kwargs) return self._queryset_class(**kwargs).filter(is_deleted=False)