2014-01-29 47 views
3

當使用Django的REST框架我得到的錯誤通過REST查詢的Django,Django的REST - Asse田:`fields`必須是一個列表或元組

File "/folder/pythonenv/project/lib/python2.7/site-packages/rest_framework/serializers.py", line 241, in get_fields 
    assert isinstance(self.opts.fields, (list, tuple)), '`fields` must be a list or tuple' 
AssertionError: `fields` must be a list or tuple 

我的設置是....

settings.py

THIRD_PARTY_APPS = (
     'south', # Database migration helpers: 
     'crispy_forms', # Form layouts 
     'rest_framework', 
    ) 

REST_FRAMEWORK = { 
       'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.AllowAny', 
       ) 
    } 

意見

from django.shortcuts import render 
from rest_framework import viewsets 
from quickstart.serializers import from quickstart.serializers import TicketInputSerializer 
from models import Abc 

class TicketInputViewSet(viewsets.ModelViewSet): 
    queryset = Abc.objects.all() 
    serializer_class = TicketInputSerializer 

urls.py

router = routers.DefaultRouter() 
router.register(r'ticket', views.TicketViewSet) 

urlpatterns = patterns('', 
    url(r'^', include(router.urls)), 
    url(r'^test', include('rest_framework.urls', namespace='rest_framework')), 

) 

串行器

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

class TicketInputSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
     model = Abc 
     fields = ('test',) 

模型

from django.db import models 

class Abc(models.Model): 
    test = models.CharField(max_length=12) 

任何想法?

回答

14

你需要使用一個元組或列表fields,其代表與單個項目的元組,你需要使用尾隨逗號:

fields = ('test',) 

沒有逗號fields = ('test')實際上相當於fields = 'test'

docs

A special problem is the construction of tuples containing 0 or 1 items: the syntax has some extra quirks to accommodate these. Empty tuples are constructed by an empty pair of parentheses; a tuple with one item is constructed by following a value with a comma (it is not sufficient to enclose a single value in parentheses). Ugly, but effective.

+0

嘗試,但同樣的,問題已更新 – felix001

+0

@ felix001您是否刷新了服務器? –

+1

@ felix001我保證這是你的問題的正確答案。在所有序列化程序中仔細檢查序列化程序的'fields'設置,並確保在完成後重啓了devserver。 –

5

('test')是不是一個元組,它是same值只是'test'

您應該添加一個尾隨逗號來創建一個單元組:

fields = ('test',) 

或者你可以使用一個列表,並沒有理會逗號:

fields = ['test']