因为我可以在元模型类中使用两个,当我运行它时,我得到一个错误 我该如何使用这些模型?这是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
答案 0 :(得分:12)
更新(2016年5月5日):
__all__
中{p> fields
ModelSerializer
的{{1}}值为now supported(感谢@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')
答案 1 :(得分:0)
我知道这个问题是在问了问题几年之后的,但是我已经遇到过几次这种情况。由于某种原因,它期望使用列表而不是单个值。
因此,如果您不想使用__all__
值,但是模型中只有1个值,则需要确保在字段部分中有一个逗号:
class Meta:
model = Post
fields = ('id',)