Cómo cambiar Django Resumen Grupo de usuarios a String
Hice algunos grupos dentro de Django Admin, pero cada vez que agrego un usuario a uno de esos grupos, sólo el grupo ID muestra dentro de mi API endpoint. ¿Hay alguna manera de mostrar el nombre de la cadena?
Así que en lugar de 1, quiero que el campo sea "Directores". ¿Tiene algo que ver con ampliar el modelo AbstractUser?
Esto es todo lo que tengo ahora mismo, para mi información de usuario:
class User(AbstractUser):
Serializer.py
from .models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
exclude = ["username", "password"]
model = User
Pregunta hecha hace 3 años, 5 meses, 1 días - Por techinnovator
3 Respuestas:
-
Usted puede hacer uso de un
SlugRelatedField
[drf-doc] para serializar los grupos:from .models import User class UserSerializer(serializers.ModelSerializer): # serialize groups with "slugs" ↓ groups = serializers.SlugRelatedField( many=True, slug_field='name' ) class Meta: exclude = ['username', 'password'] model = User
Respondida el Dec 16, 2020 a las 20:07 - por compilerchieftain
Votos positivos: 0 | Votos negativos: 0 -
Parece que estás interesado en mostrar el nombre del grupo de usuarios en lugar de su ID en tu API. Para lograr esto, puedes modificar tu
UserSerializer
para incluir el nombre del grupo en lugar del ID. Aquí tienes un ejemplo de cómo hacerlo:python from rest_framework import serializers from django.contrib.auth.models import Group from .models import User class UserSerializer(serializers.ModelSerializer): groups = serializers.SerializerMethodField() def get_groups(self, user): return [group.name for group in user.groups.all()] class Meta: exclude = ["username", "password"] model = User
En este ejemplo, hemos agregado un campo
groups
utilizandoSerializerMethodField
que llamará a la funciónget_groups
para obtener los nombres de los grupos a los que pertenece el usuario en lugar de sus IDs.Recuerda importar
Group
en tus imports y asegurarte de que los grupos estén asociados correctamente a los usuarios en tu base de datos.Espero que esta solución te ayude a mostrar el nombre del grupo en tu API en lugar del ID.
Respondida el Dec 17, 2020 a las 20:04 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para mostrar el nombre de cadena del grupo en lugar del ID del grupo en tu API endpoint, debes personalizar el serializador de Django para el modelo User. Aquí tienes cómo hacerlo paso a paso:
1. Crea un método de serializador personalizado:
Agrega el siguiente método a tu archivo de serializadores (serializer.py):
python def get_group_name(self, obj): return obj.groups.first().name
Este método extrae el primer grupo del usuario y devuelve su nombre.
2. Actualiza el serializador UserSerializer:
Agrega el método personalizado
get_group_name
al campogroups
de tu serializador UserSerializer:python class UserSerializer(serializers.ModelSerializer): groups = serializers.SerializerMethodField(method_name="get_group_name") class Meta: exclude = ["username", "password"] model = User
3. Migra tu base de datos:
Ejecuta el comando
makemigrations
y luegomigrate
para crear la columnagroups
en tu base de datos:$ python manage.py makemigrations $ python manage.py migrate
4. Reinicia tu servidor:
Reinicia el servidor de Django para que los cambios surtan efecto.
Ahora, cuando llames al endpoint de tu API, deberías ver el nombre del grupo como una cadena en el campo
groups
del objeto de usuario serializado.Respondida el Dec 17, 2020 a las 20:13 - por Gemini
Votos positivos: 0 | Votos negativos: 0