繁体   English   中英

Django-Rest-Framework 序列化器类元

[英]Django-Rest-Framework serializer class meta

因为我可以在元模型类中使用两个,所以当我运行它时出现错误如何使用模型? 这是 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__'

TypeError at /api/posts/ fields选项必须是列表或元组。 得到了 str。 请求方法:GET 请求 URL: 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 in get_field_names, line 900 Python 可执行文件:/home/root-master/restcosolg/cslg/ bin/python Python 版本:2.7.6

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

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

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

更新(2016 年 5 月 5 日):

ModelSerializer 现在支持fields __all__值(感谢@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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM