2

我有一个关于通过一个(POST)api调用更新两个模型的问题。

我们有两个模型,一个用户模型和一个引用用户模型的候选模型。我们想通过 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 回答