メタモデルクラスで2つ使用できるため、実行するとエラーが発生します。モデルの使用方法を教えてください。 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リクエストURL: http://127.0.0.1:8000/api/posts/ Djangoバージョン:1.8.3例外タイプ:TypeError例外値:fields
オプションはリストまたはタプルでなければなりません。例外の場所を取得しました:/home/root-master/restcosolg/cslg/local/lib/python2.7/site-packages/rest_framework/serializers.py in get_field_names、900行目Python実行可能ファイル:/ home/root-master/restcosolg/cslg/bin/python Pythonバージョン:2.7.6
更新(2016年5月5日):
fields
の__all__
値は 現在サポートされていますModelSerializer
にあります(ありがとう @ wim
また、
fields
属性を特別な値'__all__'
に設定して、モデル内のすべてのフィールドを使用する必要があることを示すこともできます。デフォルトのフィールドのサブセットのみをモデルシリアライザーで使用する場合は、
fields
またはexclude
オプションを使用して、ModelForm
と同じように実行できます。 。fields
属性を使用してシリアル化する必要があるすべてのフィールドを明示的に設定することを強くお勧めします。これにより、結果が発生しにくくなりますモデルが変更されたときに、意図せずにデータを公開します。
Django ModelForm fields
属性とDRFシリアライザ fields
属性を混合しようとしているようです。
DRFシリアライザーでは、__all__
はfields
属性の無効な値です。
2番目に、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')
この回答は質問されてから数年後のことですが、私はこの状況に数回遭遇しました。何らかの理由で、単一の値ではなくリストが必要です。
したがって、__all__
値を使用したくないが、モデルに値が1つしかない場合は、フィールドセクションにコンマがあることを確認する必要があります。
class Meta:
model = Post
fields = ('id',)