web-dev-qa-db-ja.com

Django-Rest-Frameworkシリアライザークラスメタ

メタモデルクラスで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

12
sagoyanfisic

更新(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')
15
Rahul Gupta

この回答は質問されてから数年後のことですが、私はこの状況に数回遭遇しました。何らかの理由で、単一の値ではなくリストが必要です。

したがって、__all__値を使用したくないが、モデルに値が1つしかない場合は、フィールドセクションにコンマがあることを確認する必要があります。

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