feat: Gestion de la mise à jour des profiles / roles / lors de l'édition

du formulaire RF
This commit is contained in:
N3WT DE COMPET
2025-05-06 13:59:31 +02:00
parent e2a39ff74d
commit dfd707d7a0
11 changed files with 270 additions and 233 deletions

View File

@ -30,4 +30,4 @@ class ProfileRole(models.Model):
updated_date = models.DateTimeField(auto_now=True)
def __str__(self):
return f"{self.profile.email} - {self.get_role_type_display()} - {self.establishment.name}"
return f"{self.profile.email} - {self.get_role_type_display()}"

View File

@ -104,6 +104,9 @@ class ProfileRoleSerializer(serializers.ModelSerializer):
elif profile:
profile = Profile.objects.get(id=profile.id)
if profile:
instance.profile = profile
instance.role_type = validated_data.get('role_type', instance.role_type)
instance.establishment_id = validated_data.get('establishment', instance.establishment.id)
instance.is_active = validated_data.get('is_active', instance.is_active)

View File

@ -141,26 +141,61 @@ class StudentSerializer(serializers.ModelSerializer):
profile_role = guardian_data.pop('profile_role', None)
if profile_role_data:
# Vérifiez si 'profile_data' est fourni pour créer un nouveau profil
profile_data = profile_role_data.pop('profile_data', None)
if profile_data:
# Créer un nouveau profil
profile_serializer = ProfileSerializer(data=profile_data)
profile_serializer.is_valid(raise_exception=True)
profile = profile_serializer.save()
profile.set_password(profile_data['password'])
profile.save()
profile_role_data['profile'] = profile.id # Associer le profil créé
# Vérifiez si 'profile' est un objet ou une clé primaire
if isinstance(profile_role_data.get('profile'), Profile):
profile_role_data['profile'] = profile_role_data['profile'].id
establishment_id = profile_role_data.pop('establishment').id
profile_role_data['establishment'] = establishment_id
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role = profile_role_serializer.save()
# Vérifiez si un ProfileRole existe déjà pour ce profile et cet établissement
existing_profile_role = ProfileRole.objects.filter(
profile_id=profile_role_data['profile'],
establishment=profile_role_data['establishment'],
role_type=profile_role_data['role_type']
).first()
if existing_profile_role:
# Mettre à jour le ProfileRole existant
profile_role_serializer = ProfileRoleSerializer(existing_profile_role, data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role = profile_role_serializer.save()
else:
# Créer un nouveau ProfileRole si aucun n'existe
profile_role_serializer = ProfileRoleSerializer(data=profile_role_data)
profile_role_serializer.is_valid(raise_exception=True)
profile_role = profile_role_serializer.save()
elif profile_role:
# Récupérer un ProfileRole existant par son ID
profile_role = ProfileRole.objects.get(id=profile_role.id)
if profile_role:
guardian_data['profile_role'] = profile_role
guardian_instance, created = Guardian.objects.update_or_create(
id=guardian_data.get('id'),
defaults=guardian_data
)
guardians_ids.append(guardian_instance.id)
# Vérifiez si un Guardian existe déjà pour ce ProfileRole
existing_guardian = Guardian.objects.filter(profile_role=profile_role).first()
if existing_guardian:
# Mettre à jour le Guardian existant
for key, value in guardian_data.items():
setattr(existing_guardian, key, value)
existing_guardian.save()
guardians_ids.append(existing_guardian.id)
else:
# Créer un nouveau Guardian
guardian_instance = Guardian.objects.create(**guardian_data)
guardians_ids.append(guardian_instance.id)
return guardians_ids
def create_or_update_siblings(self, siblings_data, student_instance):
@ -375,3 +410,4 @@ class NotificationSerializer(serializers.ModelSerializer):
class Meta:
model = Notification
fields = '__all__'

View File

@ -236,6 +236,7 @@ class RegisterFormWithIdView(APIView):
studentForm_data = request.data.get('data', '{}')
try:
data = json.loads(studentForm_data)
print(f'data : {data}')
except json.JSONDecodeError:
return JsonResponse({"error": "Invalid JSON format in 'data'"}, status=status.HTTP_400_BAD_REQUEST)