4

実行時にシリアライザーのメタオプションを簡単に変更できることがわかりました(これが正しい呼び出し方かどうかさえわかりません。私は好きではありませんが、誰かがそれをモンキーパッチと呼んでいます):

NodeDetailSerializer.Meta.fields.append('somefield')

次のようなことをする必要がある場合:

NodeDetailSerializer.contact = serializers.HyperlinkedIdentityField(view_name='api_node_contact', slug_field='slug')
NodeDetailSerializer.Meta.fields.append('contact')

なぜ私はそれをする必要があるのですか?モジュラー アプリケーションを構築しようとしています。追加できるオプションのアプリがいくつかあります。これらのアプリは、コアの機能にいくつかの機能を自動的に追加します。追加のアプリケーションが別のリポジトリに移動される可能性があるため、2 つのアプリのコードを分けておきたいと思います。

モジュール化された拡張可能なアプリを作成することは、実に難しい作業です。誰かが共有できる有用なリソースを持っている場合は、それについてもっと知りたいです。

フェデリコ

4

1 に答える 1

3

問題の解決策を見つけました。

私の問題は、コア アプリのコードを編集せずに、他のリソースへのハイパーリンクを追加できるようにする必要があったことです。追加モジュールのコードから行う必要がありました。

このシリアライザ ミックスインを作成しました: https://gist.github.com/nemesisdesign/8132696

このように使用できます:

from myapp.serializers import MyExtensibleSerializer

MyExtensibleSerializer.add_relationship(**{
    'name': 'key_name',
    'view_name': 'view_name_in_urls_py',
    'lookup_field': 'arg_passed_to_to_view_name'
})
于 2013-12-26T11:42:51.877 に答える