5

Hier mein Modell ist:Django Rest serializer.data eine leere OrderedDict ist()

from django.db import models 
from django.contrib.auth.models import User 
from datetime import datetime 


class Staff(models.Model): 
    employer = models.ForeignKey("shops.Shop") 
    user = models.ForeignKey(User) 

    def __unicode__(self): 
     return self.user.username 

Hier ist meine Serializer:

from rest_framework import serializers 
from staff.models import Staff 


class StaffSerializer(serializers.Serializer): 
    class Meta: 
     model = Staff 
     fields = ("id", "employer", "user") 

Hier ist meine Ansicht:

from staff.models import Staff 
from staff.serializers import StaffSerializer 
from rest_framework import generics 
from rest_framework.response import Response 



class StaffList(generics.ListCreateAPIView): 
    queryset = Staff.objects.all() 
    serializer_class = StaffSerializer 

    def list(self, request): 
     queryset = self.get_queryset() 
     serializer = StaffSerializer(queryset, many=True) 
     print queryset 
     print serializer 
     print serializer.data 
     return Response(serializer.data) 

Wenn ich diese Seite auf der websuchbaren API betrachte, sehe ich Folgendes:

HTTP 200 OK 
Content-Type: application/json 
Vary: Accept 
Allow: GET, POST, HEAD, OPTIONS 

[ 
    {} 
] 

und das Ergebnis des Druck serializer.data und queryset ist dies:

{<Staff: Alex>} 
StaffSerializer([<Staff: Alex>], many=True): 
[OrderedDict()] 

Gibt es etwas falsch mit meinem Serializer oder ist dies ein weiteren alle zusammen Problem?

Antwort

19

Sie müssen serializers.ModelSerializer verwenden kein serializers.Serializer, wenn Sie mit Modellen und querysets arbeiten.

Wenn Sie Serializer.Serializer verwenden, müssen Sie Feld manuell darin definieren. Wie folgt aus:

class StaffSerializer(serializers.Serializer): 
    id = serializers.IntegerField() 
    content = serializers.CharField(max_length=200) 

usw. Sie kann sie in meta Referenz wie mit ModelSerializer. Docs on ModelSerializer finden Sie here

+0

Danke, fügte es mit einem Link zu Serializer-Dokumentation. – Aldarund

+0

Das passiert mir, wenn ich 'serializers.Serializer' verwende. Hast du eine Ahnung? –

Verwandte Themen