Compare commits

...

3 Commits

Author SHA1 Message Date
bad6bfb4c0 * Updated field naming in some serializers
* Admin tweaks
* Settings editing only for admin
2024-05-30 21:02:07 +04:00
849457a051 * SimpleRouter for non-debug environment 2024-05-30 20:59:46 +04:00
8f0096946f * Make API schema visible only for admins 2024-05-30 20:58:13 +04:00
9 changed files with 28 additions and 20 deletions

View File

@ -1,9 +1,9 @@
from django.urls import path, include from django.urls import path, include
from rest_framework.routers import DefaultRouter
from account import views from account import views
from poizonstore.utils import get_drf_router
router = DefaultRouter() router = get_drf_router()
router.register("users", views.UserViewSet) router.register("users", views.UserViewSet)
urlpatterns = [ urlpatterns = [

View File

@ -7,13 +7,14 @@ from poizonstore.utils import PriceField
class GlobalSettingsSerializer(serializers.ModelSerializer): class GlobalSettingsSerializer(serializers.ModelSerializer):
yuan_rate = PriceField(source='full_yuan_rate', read_only=True) yuan_rate = PriceField(source='full_yuan_rate', read_only=True)
yuan_rate_commission = PriceField() yuan_rate_commission = PriceField()
chinadelivery = PriceField(source='delivery_price_CN') delivery_price_CN = PriceField()
commission = PriceField(source='commission_rub') commission_rub = PriceField()
pickup = serializers.CharField(source='pickup_address') pickup_address = serializers.CharField()
class Meta: class Meta:
model = GlobalSettings model = GlobalSettings
fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission', 'commission', 'chinadelivery', 'pickup', 'time_to_buy') fields = ('yuan_rate', 'yuan_rate_last_updated', 'yuan_rate_commission',
'commission_rub', 'delivery_price_CN', 'pickup_address', 'time_to_buy')
read_only_fields = ('yuan_rate_last_updated',) read_only_fields = ('yuan_rate_last_updated',)

View File

@ -1,9 +1,9 @@
from django.urls import path from django.urls import path
from rest_framework.routers import DefaultRouter
from poizonstore.utils import get_drf_router
from . import views from . import views
router = DefaultRouter() router = get_drf_router()
urlpatterns = [ urlpatterns = [

View File

@ -1,13 +1,13 @@
from rest_framework import generics from rest_framework import generics
from account.permissions import IsManager, ReadOnly from account.permissions import ReadOnly, IsAdmin
from core.models import GlobalSettings from core.models import GlobalSettings
from core.serializers import GlobalSettingsSerializer, AnonymousGlobalSettingsSerializer from core.serializers import GlobalSettingsSerializer, AnonymousGlobalSettingsSerializer
class GlobalSettingsAPI(generics.RetrieveUpdateAPIView): class GlobalSettingsAPI(generics.RetrieveUpdateAPIView):
serializer_class = GlobalSettingsSerializer serializer_class = GlobalSettingsSerializer
permission_classes = [IsManager | ReadOnly] permission_classes = [IsAdmin | ReadOnly]
def get_serializer_class(self): def get_serializer_class(self):
if getattr(self.request.user, 'is_manager', False): if getattr(self.request.user, 'is_manager', False):

View File

@ -17,9 +17,11 @@ Including another URLconf
from django.conf import settings from django.conf import settings
from django.conf.urls.static import static from django.conf.urls.static import static
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.decorators import permission_required
from django.urls import path, include from django.urls import path, include
from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView
from account.permissions import IsAdmin
urlpatterns = [ urlpatterns = [
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
@ -31,8 +33,7 @@ urlpatterns = [
+ static(settings.STATIC_URL) + static(settings.STATIC_URL)
# API schema # API schema
if settings.DEBUG: urlpatterns += [
urlpatterns += [ path('api/schema/', permission_required([IsAdmin])(SpectacularAPIView.as_view()), name='schema'),
path('api/schema/', SpectacularAPIView.as_view(), name='schema'), path('api/redoc/', permission_required([IsAdmin])(SpectacularRedocView.as_view(url_name='schema')), name='redoc'),
path('api/redoc/', SpectacularRedocView.as_view(url_name='schema'), name='redoc'), ]
]

View File

@ -1,7 +1,9 @@
from functools import reduce from functools import reduce
from django.conf import settings
from django_filters import DateFromToRangeFilter as _DateFromToRangeFilter from django_filters import DateFromToRangeFilter as _DateFromToRangeFilter
from rest_framework.fields import DecimalField from rest_framework.fields import DecimalField
from rest_framework.routers import SimpleRouter, DefaultRouter
class PriceField(DecimalField): class PriceField(DecimalField):
@ -20,3 +22,7 @@ class DateFromToRangeFilter(_DateFromToRangeFilter):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
self.field.widget.suffixes = ['from', 'to'] self.field.widget.suffixes = ['from', 'to']
def get_drf_router():
return DefaultRouter() if settings.DEBUG else SimpleRouter()

View File

@ -18,7 +18,7 @@ class ImageAdmin(admin.ModelAdmin):
@admin.register(Checklist) @admin.register(Checklist)
class ChecklistAdmin(admin.ModelAdmin): class ChecklistAdmin(admin.ModelAdmin):
list_display = ('id', 'brand', 'model', 'price_rub', 'commission_rub', 'full_price', 'date', 'status_display') list_display = ('id', 'brand', 'model', 'price_rub', 'commission_rub', 'full_price', 'date', 'status_display', 'customer')
ordering = ('-status_updated_at', '-created_at') ordering = ('-status_updated_at', '-created_at')
@display(description='Статус') @display(description='Статус')

View File

@ -38,11 +38,11 @@ class CategoryChecklistSerializer(serializers.ModelSerializer):
class CategorySerializer(serializers.ModelSerializer): class CategorySerializer(serializers.ModelSerializer):
chinarush = PriceField(source='delivery_price_CN_RU') delivery_price_CN_RU = PriceField()
class Meta: class Meta:
model = Category model = Category
fields = ('id', 'name', 'chinarush', 'commission') fields = ('id', 'name', 'delivery_price_CN_RU', 'commission')
class CategoryFullSerializer(CategorySerializer): class CategoryFullSerializer(CategorySerializer):

View File

@ -1,9 +1,9 @@
from django.urls import path from django.urls import path
from rest_framework.routers import DefaultRouter
from poizonstore.utils import get_drf_router
from store import views from store import views
router = DefaultRouter() router = get_drf_router()
router.register(r'checklist', views.ChecklistAPI, basename='checklist') router.register(r'checklist', views.ChecklistAPI, basename='checklist')