Я хочу принять параметр из URL-адреса в django rest framework и сохранить его в модели

#django #django-rest-framework #django-views #django-serializer

#django #django-rest-framework #django-views #django-сериализатор

Вопрос:

Создание приложения на основе ролей с использованием django rest framework. Я хочу добавить пользователя на основе их ролей.Я получаю роль из url

 path("create-profile/<str:role>",views.create_profile),
 

Я хочу добавить эту роль в поле groups.

 def create_profile(request,role):
   serializer = CreateProfileSerializer(data=request.data)
   serializer.is_valid(raise_exception=True)
   serializer.save(parent_id = request.user.username)
   return Response("Profile Created Successfully.")
 

Если я пытаюсь использовать приведенный ниже код до или после serializer.save()

 serializer.groups.add(Group.objects.get(name = role))
 

Он выдает ошибку ниже

 AttributeError: 'CreateProfileSerializer' object has no attribute 'groups'
 

Я также пытался передать аргумент ключевого слова, как я это делал для parent_id, он также не работает.

Ответ №1:

Если вы хотите создать группу Django на основе параметра роли, переданного через URL, попробуйте:

 from django.contrib.auth.models import Group
role_group, created = Group.objects.get_or_create(name=role)
 

Если вы хотите добавить пользователя в эту группу, которую вы только что создали, попробуйте:

 role_group.user_set.add(user)
            OR
user.groups.add(role_group)
 

Если вы хотите получить параметр из url и сохранить его в модели, вам просто нужно добавить поле в модель,
извлечь параметр из url и добавить его в тело запроса как,

request.data[‘role’] = self.kwargs[‘роль’]

и сохранить его в модели с помощью сериализатора.

Комментарии:

1. Я уже пробовал использовать ваш метод. Это не работает.

2. Привет @RamshaBukhari, я нашел решение… Спасибо за помощь

Ответ №2:

Это добавит роль в поле «группы», поскольку поле «группы» представляет собой список, поэтому я использовал метод добавления для добавления роли.

 def create_profile(request,role):
   serializer = CreateProfileSerializer(data=request.data)
   serializer.is_valid(raise_exception=True)
   serializer.validated_data["groups"].append(Group.objects.get(name = role)
   serializer.save(parent_id = request.user.username)
   return Response("Profile Created Successfully.")