2016-03-31 12 views
1

私は 'Django Rest Framework'を使用していますが、RestfulAPIを構築しようとしています。しかし、私は私のアプリを実行すると上記のエラーが発生します。AssertionError: The field 'doctor' was declared on serializer AnimalSerialiser, but has not been included in the 'fields' option.私はfieldsが何であるか分かりませんので、問題を追跡できません。AssertionError:フィールド ''がシリアライザで宣言されましたが、 'fields'オプションに含まれていません。

マイ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) 

マイ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') 

私の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 

感謝。

+0

おそらく、 'fields'に' doctor'の代わりに 'Doctor'を使用しているからでしょうか? – v1k45

+0

@ v1k45お返事ありがとうございました、それは – user3395936

+0

です。あなたは 'serializer'、' serialiser'と 'serealiser'を使用しています。私はあなたに混乱を避けるために 'シリアライザ'(DRFによって "課された"という綴り)を使うように頼んでいます。 – MariusSiuram

答えて

3

あなたは適切なケースのように、あなたのdoctorフィールド名を変更する必要があります

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

Doctorは、現在、間違って大文字です。

0

シリアライザで定義するフィールドは、メタクラスのフィールドに入れる必要があります。あなたが言及しない場合は、エラーが発生します。あなたのメタフィールドは、この医師のフィールドを持っている必要がありますので、だからあなたの場合には、あなたがシリアライザで医師フィールドを定義している

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

大文字と小文字を区別するです。だからの代わりにの医者を使用する必要があります。

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


class Meta: 
    model = Animal 
    fields = ('id' , 'name' , 'gender' , 'breed' , 'adoption' , 'vaccines', 'doctor') 
関連する問題