* Allow anonymous users to edit a set of fields of Checklist
This commit is contained in:
parent
77f0838d2d
commit
a528974347
|
|
@ -187,6 +187,17 @@ class ChecklistSerializer(serializers.ModelSerializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class AnonymousUserChecklistSerializer(ChecklistSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = ChecklistSerializer.Meta.model
|
||||||
|
fields = ChecklistSerializer.Meta.fields
|
||||||
|
read_only_fields = tuple(set(ChecklistSerializer.Meta.fields) -
|
||||||
|
{'paymentprovement', 'paymenttype',
|
||||||
|
'buyername', 'buyerphone',
|
||||||
|
'delivery',
|
||||||
|
'recievername', 'recieverphone', 'tg'})
|
||||||
|
|
||||||
|
|
||||||
class GlobalSettingsYuanRateSerializer(serializers.ModelSerializer):
|
class GlobalSettingsYuanRateSerializer(serializers.ModelSerializer):
|
||||||
currency = serializers.DecimalField(source='yuan_rate', max_digits=10, decimal_places=2)
|
currency = serializers.DecimalField(source='yuan_rate', max_digits=10, decimal_places=2)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,10 +16,18 @@ from store.exceptions import CRMException
|
||||||
from store.models import User, Checklist, GlobalSettings, Category, PaymentMethod, Promocode
|
from store.models import User, Checklist, GlobalSettings, Category, PaymentMethod, Promocode
|
||||||
from store.serializers import (UserSerializer, LoginSerializer, ChecklistSerializer, GlobalSettingsYuanRateSerializer,
|
from store.serializers import (UserSerializer, LoginSerializer, ChecklistSerializer, GlobalSettingsYuanRateSerializer,
|
||||||
CategorySerializer, GlobalSettingsPriceSerializer, PaymentMethodSerializer,
|
CategorySerializer, GlobalSettingsPriceSerializer, PaymentMethodSerializer,
|
||||||
PromocodeSerializer, GlobalSettingsPickupSerializer)
|
PromocodeSerializer, GlobalSettingsPickupSerializer, AnonymousUserChecklistSerializer)
|
||||||
from utils.permissions import ReadOnly
|
from utils.permissions import ReadOnly
|
||||||
|
|
||||||
|
|
||||||
|
class DisablePermissionsMixin(generics.GenericAPIView):
|
||||||
|
def get_permissions(self):
|
||||||
|
if settings.DISABLE_PERMISSIONS:
|
||||||
|
return [permissions.AllowAny()]
|
||||||
|
|
||||||
|
return super().get_permissions()
|
||||||
|
|
||||||
|
|
||||||
class UserAPI(mixins.ListModelMixin, mixins.RetrieveModelMixin, generics.GenericAPIView):
|
class UserAPI(mixins.ListModelMixin, mixins.RetrieveModelMixin, generics.GenericAPIView):
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
|
|
||||||
|
|
@ -56,15 +64,26 @@ class LoginAPI(generics.GenericAPIView):
|
||||||
return Response(UserSerializer(user).data)
|
return Response(UserSerializer(user).data)
|
||||||
|
|
||||||
|
|
||||||
class ChecklistAPI(mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin, generics.GenericAPIView):
|
class ChecklistAPI(mixins.ListModelMixin, mixins.CreateModelMixin, mixins.RetrieveModelMixin, DisablePermissionsMixin):
|
||||||
serializer_class = ChecklistSerializer
|
serializer_class = ChecklistSerializer
|
||||||
permission_classes = [IsAuthenticated | ReadOnly] if not settings.DISABLE_PERMISSIONS else [permissions.AllowAny]
|
|
||||||
lookup_field = 'id'
|
lookup_field = 'id'
|
||||||
filterset_fields = ['status', ]
|
filterset_fields = ['status', ]
|
||||||
filter_backends = [filters.SearchFilter]
|
filter_backends = [filters.SearchFilter]
|
||||||
search_fields = ['id', 'poizon_tracking', 'buyer_phone']
|
search_fields = ['id', 'poizon_tracking', 'buyer_phone']
|
||||||
# TODO: search by full_price
|
# TODO: search by full_price
|
||||||
|
|
||||||
|
def get_serializer_class(self):
|
||||||
|
if self.request.user.is_authenticated:
|
||||||
|
return ChecklistSerializer
|
||||||
|
|
||||||
|
return AnonymousUserChecklistSerializer
|
||||||
|
|
||||||
|
def get_permissions(self):
|
||||||
|
if self.request.method in ('GET', 'PATCH'):
|
||||||
|
return [permissions.AllowAny()]
|
||||||
|
|
||||||
|
return super().get_permissions()
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return Checklist.objects.all().with_base_related() \
|
return Checklist.objects.all().with_base_related() \
|
||||||
.annotate_price_rub().annotate_commission_rub() \
|
.annotate_price_rub().annotate_commission_rub() \
|
||||||
|
|
@ -163,9 +182,9 @@ class PricesAPI(generics.GenericAPIView):
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
class PickupAPI(generics.GenericAPIView):
|
class PickupAPI(DisablePermissionsMixin):
|
||||||
serializer_class = GlobalSettingsPickupSerializer
|
serializer_class = GlobalSettingsPickupSerializer
|
||||||
permission_classes = [IsAuthenticated | ReadOnly] if not settings.DISABLE_PERMISSIONS else [permissions.AllowAny]
|
permission_classes = [IsAuthenticated | ReadOnly]
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
return GlobalSettings.load()
|
return GlobalSettings.load()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user