77 lines
1.9 KiB
Python
77 lines
1.9 KiB
Python
from rest_framework import serializers
|
|
import json
|
|
from django.utils.translation import gettext, gettext_lazy as _
|
|
from rest_framework.generics import get_object_or_404
|
|
|
|
from BaseBillet.models import Event, TarifBillet
|
|
|
|
|
|
class TarifsSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = TarifBillet
|
|
fields = [
|
|
'uuid',
|
|
"name",
|
|
"prix",
|
|
"reservation_par_user_max",
|
|
]
|
|
extra_kwargs = {'event': {'required': False}}
|
|
|
|
|
|
class EventSerializer(serializers.ModelSerializer):
|
|
tarifs = TarifsSerializer(
|
|
many=True,
|
|
read_only=True
|
|
)
|
|
|
|
class Meta:
|
|
model = Event
|
|
fields = [
|
|
'uuid',
|
|
'name',
|
|
'short_description',
|
|
'long_description',
|
|
'datetime',
|
|
'tarifs',
|
|
'articles',
|
|
'img',
|
|
'reservations',
|
|
'complet',
|
|
]
|
|
read_only_fields = ['reservations']
|
|
depth = 1
|
|
|
|
def validate(self, attrs):
|
|
|
|
tarifs = self.initial_data.get('tarifs')
|
|
if tarifs:
|
|
try:
|
|
tarifs_list = json.loads(tarifs)
|
|
except json.decoder.JSONDecodeError as e :
|
|
raise serializers.ValidationError(_(f'tarifs doit être un json valide : {e}'))
|
|
|
|
self.tarif_to_db = []
|
|
for tarif in tarifs_list:
|
|
self.tarif_to_db.append(get_object_or_404(TarifBillet, uuid=tarif.get('uuid')))
|
|
return super().validate(attrs)
|
|
else:
|
|
raise serializers.ValidationError(_('tarifs doit être un json valide'))
|
|
|
|
def save(self, **kwargs):
|
|
instance = super().save(**kwargs)
|
|
instance.tarifs.clear()
|
|
for tarif in self.tarif_to_db :
|
|
instance.tarifs.add(tarif)
|
|
return instance
|
|
|
|
'''
|
|
[
|
|
{
|
|
"uuid": "37a1093f-565d-4b38-858d-680568269d43",
|
|
},
|
|
{
|
|
"uuid": "94d36be2-9bb9-4aa6-ab60-fc76287a1290",
|
|
}
|
|
]
|
|
'''
|