estoy usando
Django==1.10.6 djangorestframework==3.6.2
Lo he intentado hasta ahora pero recibo un error de clave
vistas.py
from django.db.models import Func, F, Sum, Count from django.db.models.functions import TruncMonth class SalesReportViewSet(viewsets.ModelViewSet): queryset = imodels.Sales.objects.all() serializer_class = iserializers.SalesReportSerializer def get_queryset(self): data = imodels.Sales.objects.annotate(month=TruncMonth('date')).values('month').annotate(c=Count('id')).values('month', 'c') return data
modelos.py
class Sales(models.Model): orig_quantity = 0 product = models.ForeignKey(Product) sold_to = models.ForeignKey(Merchant) quantity = models.PositiveIntegerField() desc = models.CharField(max_length=255) date = models.DateTimeField() created_at = models.DateTimeField(default=datetime.now)
serializadores.py
class SalesReportSerializer(serializers.ModelSerializer): class Meta: model = models.Sales #fields = ['id', 'quantity', 'total'] fields = '__all__'
error Recibo KeyError en /sales-report/ "Obtuve KeyError al intentar obtener un valor para la
quantity
de campo en el serializadorSalesReportSerializer
.\nEl campo del serializador puede tener un nombre incorrecto y no coincidir con ningún atributo o clave en la instancia de dictado.\dict
original el texto era: 'cantidad'.
Su conjunto de consultas es incorrecto. Ni siquiera es queryset ahora:
data = (imodels.Sales.objects .annotate(month=TruncMonth('date')) .values('month') .annotate(c=Count('id')) .values('month', 'c') # After this call you will receive list of dicts # [{"month": ..., 'c': ...}, ...]
Entonces, el resultado de su método 'get_queryset' es un dictado que no tiene quantity
de campo. Serializer le informa sobre eso por error.
Intente agregar todos los valores que requiere el serializador a la última llamada de values
.