perf: change favorite asset, one asset only in one folder

This commit is contained in:
ibuler
2026-07-14 16:50:23 +08:00
parent 24520f1e8b
commit 49b76a37ef
3 changed files with 22 additions and 3 deletions

View File

@@ -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

View File

@@ -39,6 +39,6 @@ class Migration(migrations.Migration):
),
migrations.AlterUniqueTogether(
name='favoriteasset',
unique_together={('user', 'asset', 'folder')},
unique_together={('user', 'asset',)},
),
]

View File

@@ -34,7 +34,7 @@ class FavoriteAsset(JMSBaseModel):
)
class Meta:
unique_together = ('user', 'asset', 'folder')
unique_together = ('user', 'asset')
verbose_name = _("Favorite asset")
@classmethod