Django-Rest-Framework序列化器类元

时间:2015-07-23 18:20:10

标签: 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__'
  

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

2 个答案:

答案 0 :(得分:12)

更新(2016年5月5日):

__all__中{p> fields ModelSerializer的{​​{1}}值为now supported(感谢@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')

答案 1 :(得分:0)

我知道这个问题是在问了问题几年之后的,但是我已经遇到过几次这种情况。由于某种原因,它期望使用列表而不是单个值。

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

class Meta:
        model = Post
        fields = ('id',)