【发布时间】:2013-07-06 06:39:29
【问题描述】:
可以在tastepie 中创建默认对象吗?我想在第一次通过 REST api 检索对象时创建一个对象,所以总是有一个返回值。我可以在dehydrate 中执行此操作,但我还需要考虑GET 参数来创建对象。重载的最佳方法是什么?如何关联对象(GET 参数所指的对象)?
【问题讨论】:
标签: python django rest tastypie
可以在tastepie 中创建默认对象吗?我想在第一次通过 REST api 检索对象时创建一个对象,所以总是有一个返回值。我可以在dehydrate 中执行此操作,但我还需要考虑GET 参数来创建对象。重载的最佳方法是什么?如何关联对象(GET 参数所指的对象)?
【问题讨论】:
标签: python django rest tastypie
我可能找到了“一个”解决方案。
在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。
这个解决方案有什么问题吗?谁能预见不良副作用?
【讨论】:
另一种方法是覆盖 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*
【讨论】: