2

1回の(POST)API呼び出しで2つのモデルを更新することに関してtastypieに問題があります。

ユーザーモデルと、ユーザーモデルを参照する候補モデルの2つのモデルがあります。APIインターフェースを介して候補モデルを公開したいが、ユーザーモデルを非表示にしたい。したがって、最初のステップとして、脱水プロセスでユーザーモデルフィールドを候補モデルフィールドとマージします。これは完全に正常に機能しています。

問題は、それを逆に行う方法がわからないことです(両方のモデルをハイドレイトして作成します。別々のユーザーモデルを作成する必要があり、両方のモデルをマージすることはできません)

4

1 に答える 1

4

いくつかのコードと何を試したかを示していただければ幸いですが、この種のタスクでは、おそらくクラスのobj_create(...)メソッドをオーバーライドする必要があります。tastypie.resources.ModelResource

次のようになります。

    def obj_create(self, bundle, request=None, **kwargs):
        """
        A ORM-specific implementation of ``obj_create``.
        """
        bundle.obj = self._meta.object_class()

        for key, value in kwargs.items():
            setattr(bundle.obj, key, value)

        bundle = self.full_hydrate(bundle)

        # Save FKs just in case.
        self.save_related(bundle)

        # Save the main object.
        bundle.obj.save()

        # Now pick up the M2M bits.
        m2m_bundle = self.hydrate_m2m(bundle)
        self.save_m2m(m2m_bundle)
        return bundle

したがって、リソースには次のようなものがあります。

from tastypie.resources import ModelResource

class MyResource( ModelResource ):

    def obj_create( self, bundle, request = None, **kwargs ):
        # ...
        # create User instance based on what's in the bundle
        # user = ...
        # ...
        # kwargs[ 'user' ] = user < will be set on Candidate instance in super()
        # ...

        # call super, resulting in creation of the Candidate model
        super( MyResource, self ).obj_create( self, bundle, request, **kwargs )

そして、これで始められるはずです。問題が発生した場合は、質問をしてコードを提供してください。

于 2012-09-05T01:41:30.353 に答える