From d8ca9d22562651d248aa24b7685d1291a2a11287 Mon Sep 17 00:00:00 2001 From: Mojtaba-z Date: Sun, 15 Jun 2025 13:01:21 +0330 Subject: [PATCH] fix update user data bug --- apps/authentication/api/v1/api.py | 1 + .../api/v1/serializers/serializer.py | 23 ++++++++++++------- ...er_user_mobile_alter_user_national_code.py | 23 +++++++++++++++++++ apps/authentication/models.py | 4 ++-- apps/authorization/api/v1/serializers.py | 4 ++-- 5 files changed, 43 insertions(+), 12 deletions(-) create mode 100644 apps/authentication/migrations/0022_alter_user_mobile_alter_user_national_code.py diff --git a/apps/authentication/api/v1/api.py b/apps/authentication/api/v1/api.py index eb861f5..060c6e6 100644 --- a/apps/authentication/api/v1/api.py +++ b/apps/authentication/api/v1/api.py @@ -101,6 +101,7 @@ class UserViewSet(ModelViewSet): serializer = self.serializer_class(data=request.data) if serializer.is_valid(): user = serializer.update(self.queryset.get(id=pk), validated_data=request.data) + if 'organization' in request.data.keys(): # noqa organization = CustomOperations().custom_update( # update organization for user request=request, diff --git a/apps/authentication/api/v1/serializers/serializer.py b/apps/authentication/api/v1/serializers/serializer.py index 64981b2..824d8da 100644 --- a/apps/authentication/api/v1/serializers/serializer.py +++ b/apps/authentication/api/v1/serializers/serializer.py @@ -97,6 +97,12 @@ class UserSerializer(serializers.ModelSerializer): extra_kwargs = { 'password': { 'required': False + }, + 'username': { + 'required': False + }, + "national_code": { + 'required': False } } @@ -104,15 +110,16 @@ class UserSerializer(serializers.ModelSerializer): """ Custom output """ representation = super().to_representation(instance) - if instance.bank_information.all(): - representation['bank_account'] = BankAccountSerializer( - instance.bank_information.all(), many=True - ).data + if isinstance(instance, User): + if instance.bank_information.filter().exists(): + representation['bank_account'] = BankAccountSerializer( + instance.bank_information.all(), many=True + ).data - if instance.city: - representation['city_name'] = instance.city.name - if instance.province: - representation['province_name'] = instance.province.name + if instance.city: + representation['city_name'] = instance.city.name + if instance.province: + representation['province_name'] = instance.province.name return representation diff --git a/apps/authentication/migrations/0022_alter_user_mobile_alter_user_national_code.py b/apps/authentication/migrations/0022_alter_user_mobile_alter_user_national_code.py new file mode 100644 index 0000000..3545962 --- /dev/null +++ b/apps/authentication/migrations/0022_alter_user_mobile_alter_user_national_code.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0 on 2025-06-15 09:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('authentication', '0021_city_province'), + ] + + operations = [ + migrations.AlterField( + model_name='user', + name='mobile', + field=models.CharField(max_length=18, null=True), + ), + migrations.AlterField( + model_name='user', + name='national_code', + field=models.CharField(max_length=16, null=True), + ), + ] diff --git a/apps/authentication/models.py b/apps/authentication/models.py index ccd4063..47874c5 100644 --- a/apps/authentication/models.py +++ b/apps/authentication/models.py @@ -7,9 +7,9 @@ from django.db import models class User(AbstractUser, BaseModel): - mobile = models.CharField(max_length=18) + mobile = models.CharField(max_length=18, null=True) phone = models.CharField(max_length=18, null=True) - national_code = models.CharField(max_length=16) + national_code = models.CharField(max_length=16, null=True) birthdate = models.DateTimeField(null=True) nationality = models.CharField(max_length=20, null=True) ownership_types = ( diff --git a/apps/authorization/api/v1/serializers.py b/apps/authorization/api/v1/serializers.py index d49d35b..9e4d51d 100644 --- a/apps/authorization/api/v1/serializers.py +++ b/apps/authorization/api/v1/serializers.py @@ -145,9 +145,9 @@ class UserRelationSerializer(serializers.ModelSerializer): """ update user relation object """ if validated_data.get('role'): - instance.role = validated_data.get('role', instance.role.id) + instance.role = Role.objects.get(id=validated_data.get("role")) if validated_data.get('organization'): - instance.organization = validated_data.get('organization', instance.organization.id) + instance.organization = Organization.objects.get(id=validated_data.get('organization')) instance.save() instance.permissions.clear() instance.permissions.add(*(validated_data.get('permissions', instance.permissions)))