diff --git a/apps/assets/api/favorite_asset.py b/apps/assets/api/favorite_asset.py index 0a333be82..812ec8f90 100644 --- a/apps/assets/api/favorite_asset.py +++ b/apps/assets/api/favorite_asset.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- # from rest_framework_bulk.generics import BulkModelViewSet +from rest_framework.viewsets import ModelViewSet +from rest_framework.response import Response +from rest_framework import status from common.permissions import IsValidUser from orgs.utils import tmp_to_root_org @@ -23,7 +26,7 @@ class FavoriteFolderViewSet(BulkModelViewSet): return FavoriteFolder.objects.filter(user=self.request.user) -class FavoriteAssetViewSet(BulkModelViewSet): +class FavoriteAssetViewSet(ModelViewSet): serializer_class = FavoriteAssetSerializer permission_classes = (IsValidUser,) filterset_fields = ['asset', 'folder'] @@ -33,6 +36,22 @@ class FavoriteAssetViewSet(BulkModelViewSet): with tmp_to_root_org(): return super().dispatch(request, *args, **kwargs) + def update(self, request, *args, **kwargs): + return super().update(request, *args, **kwargs) + + def create(self, request, *args, **kwargs): + asset_id = request.data.get('asset') + instance = FavoriteAsset.objects.filter(user=request.user, asset_id=asset_id).first() + + if instance: + serializer = self.get_serializer(instance, data=request.data, partial=True) + else: + serializer = self.get_serializer(data=request.data) + + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data, status=status.HTTP_201_CREATED) + def get_queryset(self): queryset = FavoriteAsset.objects.filter( user=self.request.user diff --git a/apps/assets/migrations/0020_favoritefolder.py b/apps/assets/migrations/0020_favoritefolder.py index 298699f98..b0473f31c 100644 --- a/apps/assets/migrations/0020_favoritefolder.py +++ b/apps/assets/migrations/0020_favoritefolder.py @@ -39,6 +39,6 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='favoriteasset', - unique_together={('user', 'asset', 'folder')}, + unique_together={('user', 'asset',)}, ), ] diff --git a/apps/assets/models/favorite_asset.py b/apps/assets/models/favorite_asset.py index dad5e1602..9599f0cee 100644 --- a/apps/assets/models/favorite_asset.py +++ b/apps/assets/models/favorite_asset.py @@ -34,7 +34,7 @@ class FavoriteAsset(JMSBaseModel): ) class Meta: - unique_together = ('user', 'asset', 'folder') + unique_together = ('user', 'asset') verbose_name = _("Favorite asset") @classmethod