I have been looking over this block of code for hours trying to simplify it. Would there be a better way to check all those conditions before creating a transaction object without using so many if-elses?
def create(self, validated_data):
user = self.context['request'].user
if user.role == 'super_admin': # ref PR 25.1
return Transaction.objects.create(**validated_data)
elif user.role == 'user' or user.role == 'org_admin' or user.role == 'site_admin': # ref PR 25.4
if check_user_institution_exists(validated_data['user_institution'].id):
if check_user_belongs_to_institution(validated_data['user_institution'].id, None, user.id) > 0:
if check_upload_permission(validated_data['user_institution'].id):
return Transaction.objects.create(**validated_data)
else:
raise serializers.ValidationError({'Error': 'You do not have upload permission for this '
'institution.'})
else:
raise serializers.ValidationError({'Error': 'You do not belong to this institution.'})
else:
raise serializers.ValidationError({'Error': 'This user institution does not exist.'})
else:
raise serializers.ValidationError({'Error': 'You are not assigned a role.'})
elsefor the outer-most if, elif? \$\endgroup\$