[英]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__'
以指示应使用模型中的所有字段。如果您只想在模型序列化程序中使用默认字段的子集,您可以使用
fields
或exclude
选项来实现,就像使用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.