#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.")