Django-rest-framework: TypeError:set_context()に1つの必須の位置引数がありません: 'serializer_field'

作成日 2019年06月24日  ·  3コメント  ·  ソース: encode/django-rest-framework

チェックリスト

  • []その問題がDjangoRESTフレームワークのmasterブランチに対して存在することを確認しました。
  • []オープンチケットとクローズドチケットの両方で同様の問題を検索しましたが、重複が見つかりません。
  • []これは使用上の問題ではありません。 (代わりに、ディスカッショングループに転送する必要があります。)
  • []これはサードパーティのライブラリとして扱うことはできません。 (可能な場合は、新しい機能ををお勧めします。)
  • []私は問題を可能な限り単純なケースに減らしました。
  • []プルリクエストとして失敗したテストを含めました。 (それができない場合でも、問題を受け入れることができます。)

再現する手順

クラスGraphDomainSerializer(serializers.ModelSerializer):
user = serializers.HiddenField(default = serializers.CurrentUserDefault)

予想される行動

実際の動作

クラスCurrentUserDefault(object):
def set_context(self、serializer_field):
self.user = serializer_field.context ['request']。user

def __call__(self):
    return self.user

def __repr__(self):
    return unicode_to_repr('%s()' % self.__class__.__name__)

def get_default(self):
"" "
入力がない場合にデータを検証するときに使用するデフォルト値を返します
このフィールドにはが提供されます。

    If a default has not been set for this field then this will simply
    raise `SkipField`, indicating that no value should be set in the
    validated data for this field.
    """
    if self.default is empty or getattr(self.root, 'partial', False):
        # No default, or this is a partial update.
        raise SkipField()
    if callable(self.default):
        if hasattr(self.default, 'set_context'):
            **self.default.set_context(self)**
        return self.default()
    return self.default

ファイル "/Users/lishijin/.pyenv/versions/3.7.2/lib/python3.7/site-packages/rest_framework/fields.py"、行490、get_default
self.default.set_context(self)
TypeError:set_context()に1つの必須の位置引数がありません: 'serializer_field'
[2019年6月24日14:34:45] "POST / photos / HTTP / 1.1" 500 21130

最も参考になるコメント

デフォルト値は、クラスではなくインスタンスである必要があります。ドキュメントに示され serializers.CurrentUserDefault()

全てのコメント3件

デフォルト値は、クラスではなくインスタンスである必要があります。ドキュメントに示され serializers.CurrentUserDefault()

デフォルトは、クラスではなくインスタンスである必要があります。ドキュメントに示されているように、 serializers.CurrentUserDefault()

それは問題を解決しました

デフォルト値は、クラスではなくインスタンスである必要があります。ドキュメントに示され serializers.CurrentUserDefault()

ありがとう、あなたは私がこの問題を解決するのを手伝ってくれました

このページは役に立ちましたか?
0 / 5 - 0 評価