【问题标题】:Django-Rest-Framework serializer class metaDjango-Rest-Framework 序列化器类元
【发布时间】:2015-10-14 05:20:15
【问题描述】:

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

【问题讨论】:

  • 您是否尝试像在 post 模型中那样添加 Miembros 的所有字段成员以查看是否是问题所在,或者您是否遇到相同的错误?

标签: django rest django-rest-framework


【解决方案1】:

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

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

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

【讨论】:

  • 救命稻草!是的,逗号语法是我的问题
【解决方案2】:

更新(2016 年 5 月 5 日):

fields__all__ 值在ModelSerializer 中是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')

【讨论】:

猜你喜欢
  • 2015-06-29
  • 1970-01-01
  • 2020-08-04
  • 2018-06-23
  • 2016-09-29
  • 2017-07-28
  • 2020-10-30
  • 2015-01-12
  • 2016-07-21
相关资源
最近更新 更多