Django-Rest-Framework序列化器类元

Paq*_*rez 9 django rest django-rest-framework

因为我可以在元模型类中使用两个,当我运行它时,我得到一个错误如何使用模型?这是Django Rest的一个例子

from rest_framework import serializers
from .models import Post,Miembros

class PostSerializer(serializers.HyperlinkedModelSerializer):

    class Meta:
        model = Post
        fields = ('id', 'url', 'titulo', 'contenido','fecha_evento','fecha_evento','banner_grande','lugar')

        model = Miembros
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

/ api/posts /中的TypeError fields选项必须是列表或元组.得了str.请求方法:GET请求URL:http://127.0.0.1 :8000/api/ postts / Django版本:1.8.3异常类型:TypeError异常值:该fields选项必须是列表或元组.得了str.异常位置:/home/root-master/restcosolg/cslg/local/lib/python2.7/site-packages/rest_framework/serializers.py in get_field_names,第900行Python可执行文件:/ home/root-master/restcosolg/cslg/bin/python Python版本:2.7.6

Ada*_*ler 18

我知道这个答案是在提出这个问题几年之后,但我已经遇到过几次这种情况。出于某种原因,它需要一个列表而不是单个值。

因此,如果您不想使用该__all__值,但模型中只有 1 个值,则需要确保在 fields 部分中有一个逗号 , :

class Meta:
        model = Post
        fields = ('id',)
Run Code Online (Sandbox Code Playgroud)


Rah*_*pta 14

更新(2016年5月5日):

__all__对于价值fields现在支持ModelSerializer(感谢@wim您指出).

您还可以fields属性设置为特殊值,'__all__' 以指示应使用模型中的所有字段.

如果您只想在模型序列化程序中使用默认字段的子集,则可以使用fieldsexclude选项,就像使用ModelForm.这是强烈建议您明确设置应使用序列化的所有字段fields属性. 这样可以减少模型更改时无意中暴露数据的可能性.

您似乎正在尝试将Django ModelForm fields属性与DRF序列化程序fields属性混合使用.
在DRF序列化程序中,属性的__all__值无效fields.

其次,您不能在Meta类中指定多个模型.您将需要使用2个单独的序列化程序并将它们相互连接.

例如,您可以执行以下操作:

from rest_framework import serializers
from .models import Post,Miembros


class MiembrosSerializer(serializers.ModelSerializer):
    """
    serializer for Miembros model
    """

    class Meta:
        model = Miembros 
        fields = '__all__' # all model fields will be included


class PostSerializer(serializers.HyperlinkedModelSerializer):
    """
    serializer for Post model
    """

    miembros = MiembrosSerializer()

    class Meta:
        model = Post
        fields = ('id', 'url', 'titulo', 'contenido','fecha_evento','fecha_evento','banner_grande','lugar')
Run Code Online (Sandbox Code Playgroud)