article serializer

This commit is contained in:
Jonas 12t 2021-10-23 16:09:48 +04:00
parent 90715a0cb9
commit 26dadfbb4f
4 changed files with 75 additions and 41 deletions

View File

@ -3,7 +3,7 @@ import json
from django.utils.translation import gettext, gettext_lazy as _ from django.utils.translation import gettext, gettext_lazy as _
from rest_framework.generics import get_object_or_404 from rest_framework.generics import get_object_or_404
from BaseBillet.models import Event, TarifBillet from BaseBillet.models import Event, TarifBillet, Article
class TarifsSerializer(serializers.ModelSerializer): class TarifsSerializer(serializers.ModelSerializer):
@ -15,7 +15,31 @@ class TarifsSerializer(serializers.ModelSerializer):
"prix", "prix",
"reservation_par_user_max", "reservation_par_user_max",
] ]
extra_kwargs = {'event': {'required': False}} read_only_fields = ['uuid']
class ArticleSerializer(serializers.ModelSerializer):
class Meta:
model = Article
fields = [
'uuid',
'name',
'prix',
'stock',
'reservation_par_user_max',
'vat',
'publish',
'img',
'categorie_article',
'id_product_stripe',
'id_price_stripe',
]
read_only_fields = [
'uuid',
'id_product_stripe',
'id_price_stripe',
]
depth = 1
class EventSerializer(serializers.ModelSerializer): class EventSerializer(serializers.ModelSerializer):
@ -38,7 +62,7 @@ class EventSerializer(serializers.ModelSerializer):
'reservations', 'reservations',
'complet', 'complet',
] ]
read_only_fields = ['reservations'] read_only_fields = ['uuid', 'reservations']
depth = 1 depth = 1
def validate(self, attrs): def validate(self, attrs):
@ -47,7 +71,7 @@ class EventSerializer(serializers.ModelSerializer):
if tarifs: if tarifs:
try: try:
tarifs_list = json.loads(tarifs) tarifs_list = json.loads(tarifs)
except json.decoder.JSONDecodeError as e : except json.decoder.JSONDecodeError as e:
raise serializers.ValidationError(_(f'tarifs doit être un json valide : {e}')) raise serializers.ValidationError(_(f'tarifs doit être un json valide : {e}'))
self.tarif_to_db = [] self.tarif_to_db = []
@ -60,10 +84,11 @@ class EventSerializer(serializers.ModelSerializer):
def save(self, **kwargs): def save(self, **kwargs):
instance = super().save(**kwargs) instance = super().save(**kwargs)
instance.tarifs.clear() instance.tarifs.clear()
for tarif in self.tarif_to_db : for tarif in self.tarif_to_db:
instance.tarifs.add(tarif) instance.tarifs.add(tarif)
return instance return instance
''' '''
[ [
{ {

View File

@ -7,6 +7,7 @@ from rest_framework import routers
router = routers.DefaultRouter() router = routers.DefaultRouter()
router.register(r'events', api_view.EventsViewSet, basename='event') router.register(r'events', api_view.EventsViewSet, basename='event')
router.register(r'tarifs', api_view.TarifBilletViewSet, basename='billet') router.register(r'tarifs', api_view.TarifBilletViewSet, basename='billet')
router.register(r'articles', api_view.ArticleViewSet, basename='article')
urlpatterns = [ urlpatterns = [

View File

@ -4,29 +4,29 @@ from django.shortcuts import render
from rest_framework.generics import get_object_or_404 from rest_framework.generics import get_object_or_404
from rest_framework.response import Response from rest_framework.response import Response
from ApiBillet.serializers import EventSerializer, TarifsSerializer from ApiBillet.serializers import EventSerializer, TarifsSerializer, ArticleSerializer
from AuthBillet.models import TenantAdminPermission from AuthBillet.models import TenantAdminPermission
from Customers.models import Client, Domain from Customers.models import Client, Domain
from BaseBillet.models import Event, TarifBillet from BaseBillet.models import Event, TarifBillet, Article
from rest_framework import viewsets, permissions, status from rest_framework import viewsets, permissions, status
import os import os
def new_tenants(schema_name): def new_tenants(schema_name):
tenant = Client.objects.get_or_create(schema_name=schema_name, tenant = Client.objects.get_or_create(schema_name=schema_name,
name=schema_name, name=schema_name,
paid_until='2200-12-05', paid_until='2200-12-05',
on_trial=False)[0] on_trial=False)[0]
# Add one or more domains for the tenant
tenant_domain = Domain.objects.get_or_create(domain=f'{schema_name}.{os.getenv("DOMAIN")}', tenant_domain = Domain.objects.get_or_create(domain=f'{schema_name}.{os.getenv("DOMAIN")}',
tenant=tenant, tenant=tenant,
is_primary=True, is_primary=True,
) )
return tenant, tenant_domain return tenant, tenant_domain
class TarifBilletViewSet(viewsets.ViewSet): class TarifBilletViewSet(viewsets.ViewSet):
def list(self, request): def list(self, request):
queryset = TarifBillet.objects.all().order_by('prix') queryset = TarifBillet.objects.all().order_by('prix')
@ -41,26 +41,45 @@ class TarifBilletViewSet(viewsets.ViewSet):
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_permissions(self): def get_permissions(self):
""" if self.action in ['list', 'retrieve']:
Instantiates and returns the list of permissions that this view requires.
"""
if self.action in ['list','retrieve']:
permission_classes = [permissions.AllowAny] permission_classes = [permissions.AllowAny]
else: else:
permission_classes = [TenantAdminPermission] permission_classes = [TenantAdminPermission]
return [permission() for permission in permission_classes] return [permission() for permission in permission_classes]
class EventsViewSet(viewsets.ViewSet):
queryset = Event.objects.all().order_by('-datetime') class ArticleViewSet(viewsets.ViewSet):
def list(self, request): def list(self, request):
serializer = EventSerializer(self.queryset, many=True, context={'request': request}) serializer = ArticleSerializer(Article.objects.all(), many=True, context={'request': request})
print(serializer.data)
return Response(serializer.data) return Response(serializer.data)
def create(self, request):
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def get_permissions(self):
if self.action in ['list', 'retrieve']:
permission_classes = [permissions.AllowAny]
else:
permission_classes = [TenantAdminPermission]
return [permission() for permission in permission_classes]
class EventsViewSet(viewsets.ViewSet):
def list(self, request):
queryset = Event.objects.all().order_by('-datetime')
serializer = EventSerializer(queryset, many=True, context={'request': request})
return Response(serializer.data)
def retrieve(self, request, pk=None): def retrieve(self, request, pk=None):
print(f"retrieve : {pk}") queryset = Event.objects.all().order_by('-datetime')
event = get_object_or_404(self.queryset, pk=pk) event = get_object_or_404(queryset, pk=pk)
serializer = EventSerializer(event) serializer = EventSerializer(event)
return Response(serializer.data) return Response(serializer.data)
@ -72,35 +91,25 @@ class EventsViewSet(viewsets.ViewSet):
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def update(self, request, pk=None): def update(self, request, pk=None):
queryset = Event.objects.all().order_by('-datetime')
print(f"update : {pk}") print(f"update : {pk}")
event = get_object_or_404(self.queryset, pk=pk) event = get_object_or_404(queryset, pk=pk)
print(event) print(event)
serializer = EventSerializer(event, data=request.data) serializer = EventSerializer(event, data=request.data)
if serializer.is_valid(raise_exception=True): if serializer.is_valid(raise_exception=True):
# import ipdb; ipdb.set_trace()
serializer.save() serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def destroy(self, request, pk=None): def destroy(self, request, pk=None):
event = get_object_or_404(self.queryset, pk=pk) queryset = Event.objects.all().order_by('-datetime')
event = get_object_or_404(queryset, pk=pk)
event.delete() event.delete()
return Response(('deleted'), status=status.HTTP_200_OK) return Response(('deleted'), status=status.HTTP_200_OK)
def get_permissions(self): def get_permissions(self):
""" if self.action in ['list', 'retrieve']:
Instantiates and returns the list of permissions that this view requires.
"""
if self.action in ['list','retrieve']:
permission_classes = [permissions.AllowAny] permission_classes = [permissions.AllowAny]
else: else:
permission_classes = [TenantAdminPermission] permission_classes = [TenantAdminPermission]
return [permission() for permission in permission_classes] return [permission() for permission in permission_classes]
class EventViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = Event.objects.all().order_by('-datetime')
serializer_class = EventSerializer
permission_classes = [permissions.AllowAny]

View File

@ -152,8 +152,7 @@ class VAT(models.Model):
class Article(models.Model): class Article(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True) uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False, unique=True, db_index=True)
name = models.CharField(max_length=50, name = models.CharField(max_length=50)
blank=True, null=True)
prix = models.FloatField() prix = models.FloatField()
stock = models.SmallIntegerField(blank=True, null=True) stock = models.SmallIntegerField(blank=True, null=True)