2016-03-31 11 views
1

Ich benutze 'Django Rest Framework' und ich versuche eine RestfulAPI zu erstellen. Allerdings bekomme ich den obigen Fehler, wenn ich meine App starte: AssertionError: The field 'doctor' was declared on serializer AnimalSerialiser, but has not been included in the 'fields' option. Ich bin mir nicht sicher, was fields sind und daher kann das Problem nicht aufspüren.AssertionError: Das Feld '' wurde auf dem Serialiser deklariert '', wurde aber nicht in die Option 'Felder' aufgenommen.

Mein models.py:

from __future__ import unicode_literals 

from django.db import models 

# Create your models here. 
class Doctor(models.Model): 

    id= models.CharField(max_length=10, primary_key=True, unique=True) 
    name = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.id 

class Animal(models.Model): 
    id = models.CharField(max_length=10, primary_key=True, unique=True) 
    name = models.CharField(max_length=200) 
    gender = models.CharField(max_length=10) 
    breed = models.CharField(max_length=200) 
    adoption = models.CharField(max_length=10) 
    vaccines = models.CharField(max_length=20) 
    doctor = models.ForeignKey(Doctor, null=True) 

Mein serialisers.py:

from django.contrib.auth.models import User, Group 
from rest_framework import serializers 
from models import Animal, Doctor 

class DoctorSerealiser(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Doctor 
     fields = ('id' , 'name') 


class AnimalSerialiser(serializers.HyperlinkedModelSerializer): 
    doctor = DoctorSerealiser() 


    class Meta: 
     model = Animal 
     fields = ('id' , 'name' , 'gender' , 'breed' , 'adoption' , 'vaccines', 'Doctor') 

Mein views.py:

from django.shortcuts import render 

# Create your views here. 
from django.contrib.auth.models import User, Group 
from rest_framework import viewsets, generics 

from cw.myStart.models import Animal 
from cw.myStart.serializers import AnimalSerialiser, DoctorSerealiser 
from models import Animal, Doctor 

class AnimalList(viewsets.ModelViewSet): 
    queryset = Animal.objects.all() 
    serializer_class = AnimalSerialiser 

class DoctorDetail(viewsets.ModelViewSet): 
    queryset = Doctor.objects.all() 
    serializer_class = DoctorSerealiser 

Vielen Dank für Ihre Hilfe.

+0

Vielleicht liegt es daran, dass Sie 'Doktor' anstelle von' Doktor' in 'Feldern' verwenden? – v1k45

+0

@ v1k45 danke, das war es – user3395936

+0

auf einer Seitennotiz, verwenden Sie 'Serialisierer',' Serialisierer' und 'Serealiser'. Ich bitte Sie, 'serializer' (die von DRF auferlegte Schreibweise) zu verwenden, um Chaos zu vermeiden. – MariusSiuram

Antwort

3

Sie benötigen doctor Feldnamen zu sein der richtige Fall ändern:

fields = ('id' , 'name' , 'gender' , 'breed' , 'adoption' , 'vaccines', 'doctor') 

Doctor derzeit fälschlicherweise groß geschrieben.

0

Welches Feld Sie auch im Serializer definieren, Sie müssen es in die Metaklassenfelder einfügen. Wenn Sie nicht erwähnen, erhalten Sie den Fehler.

builtins.AssertionError AssertionError: The field 'abc' was declared on serializer ABCSerializer, but has not been included in the 'fields' option.

Also in Ihrem Fall, dass Sie Arzt Feld in Serializer definiert haben, so dass Sie Metafelder Diesen Arzt Feld haben sollte. Es ist Groß-und Kleinschreibung. So müssen Sie Arzt anstelle von Arzt verwenden.

class AnimalSerialiser(serializers.HyperlinkedModelSerializer): 
doctor = DoctorSerealiser() 


class Meta: 
    model = Animal 
    fields = ('id' , 'name' , 'gender' , 'breed' , 'adoption' , 'vaccines', 'doctor') 
Verwandte Themen