【问题标题】:Tastypie get_or_create object美味的 get_or_create 对象
【发布时间】:2013-07-06 06:39:29
【问题描述】:

可以在tastepie 中创建默认对象吗?我想在第一次通过 REST api 检索对象时创建一个对象,所以总是有一个返回值。我可以在dehydrate 中执行此操作,但我还需要考虑GET 参数来创建对象。重载的最佳方法是什么?如何关联对象(GET 参数所指的对象)?

【问题讨论】:

    标签: python django rest tastypie


    【解决方案1】:

    我可能找到了“一个”解决方案。

    ModelResource,我超载obj_get_list

    def obj_get_list(self, bundle, **kwargs):
        if bundle.request.method == 'GET':
            related_id = bundle.request.GET['entity']
            # create new object if it doesn't exist and populate with `related_id`
            # ...
        objects = ModelResource.obj_get_list(self, bundle, **kwargs)
        return objects
    

    调用它的 url 将有一个 GET 参数/url/to/resource?entity=1

    这个解决方案有什么问题吗?谁能预见不良副作用?

    【讨论】:

      【解决方案2】:

      另一种方法是覆盖 obj_get 函数。

      def obj_get(self, bundle, **kwargs):
          pk = kwargs['pk']
          if pk.startswith('identifier'):
              pk = pk.replace("identifier/", "")
              instance, created = Model.objects.get_or_create(identifier=pk)
              kwargs['pk'] = str(instance.pk)
      
          return super().obj_get(bundle, **kwargs)
      

      这允许使用以下格式的 URL:/url/to/resource/identifier/*some_identifier*

      【讨论】:

        猜你喜欢
        • 2014-02-21
        • 1970-01-01
        • 2012-04-19
        • 2018-12-10
        • 1970-01-01
        • 2016-10-19
        • 2012-07-09
        • 2014-06-02
        • 1970-01-01
        相关资源
        最近更新 更多