GOOGLE ADS

miércoles, 20 de abril de 2022

¿Cómo se pueden obtener datos del modelo relacionado en Django Rest Framework?

tengo proximos modelos

class User(AbstractUser):
ip_address = models.CharField(max_length=15)
class Statistic(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='statistics')
clicks = models.PositiveSmallIntegerField()

y serializadores

class UserListSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['id', 'first_name', 'ip_address']
class UserStatisticSerializer(serializers.ModelSerializer):
class Meta:
model = Statistic

¿Cómo puedo obtener Responsedatos en el siguiente formato:

{
'user_data': {
'id': 1, 'first_name': 'name',...,
'statistics': [
{'id': 1, 'clicks': 100},
{'id': 3, 'clicks': 550}
]
}

Voy al enlace /api/v1/users/<int:pk>/y llamo a la siguiente función:

class UserDetailStatisticApiView(RetrieveAPIView):
queryset =???
serializer_class =???

Gracias por ayuda


Solución del problema

Vista

class UserDetailStatisticApiView(RetrieveAPIView):
queryset = User.objects.all()
serializer_class = UserListSerializer


Serializadores

class UserStatisticSerializer(serializers.ModelSerializer):
class Meta:
model = Statistic
fields = '__all__'
class UserListSerializer(serializers.ModelSerializer):
statistics = SerializerMethodField()
class Meta:
model = User
fields = ['id', 'first_name', 'statistics']

def get_statistics(self,obj):
statistics = Statistic.objects.filter(user=obj)
return UserStatisticSerializer(statistics, many=True).data

No hay comentarios.:

Publicar un comentario

Flutter: error de rango al acceder a la respuesta JSON

Estoy accediendo a una respuesta JSON con la siguiente estructura. { "fullName": "FirstName LastName", "listings...