0

私はいくつかの助けが必要です, 私はで使用ModelSerializerしましたDRF, ここに問題があります:

応答を動的に生成したい、つまりユーザーの入力を決定するので、リクエストパラメータを に渡しModelSerializer、条件が確立されているかどうかを判断し、フィールドを生成し、そうでない場合は他のフィールドを生成する必要があります。

このようなもの:

class AlbumSerializer(serializers.ModelSerializer):

    class Meta:
        model = Album
        if request.SOME_CONDITION: 
            fields = ('id', 'name_fa', 'name_en', 'price')
        else: 
            fields = ('description', 'image_path_absolute', 'publisher')

私はググって、シリアライザーを使用contextしてパラメーターを渡すことができることを知りましたが、シリアライザーではオブジェクトを介してパラメーターを取得する必要がありselfます。

これどうやってするの?

4

1 に答える 1

1

わーい

見つけた。

シリアライザー クラスのメソッドをオーバーライド__init__()し、コンテキストを使用してパラメーターを取得し、不要なフィールドを除外し、最後にスーパー クラスを呼び出す必要があります。

def __init__(self, *args, **kwargs):
    if 'context' in kwargs:
        context = kwargs.get('context')
        if 'user' in context:
            if SOME_CONDITION:
                super(AlbumSerializer, self).__init__(*args, **kwargs)
                self.fields.pop(key)
                pass
    super(AlbumSerializer, self).__init__(*args, **kwargs)
于 2015-08-19T06:39:57.457 に答える