我想使用tastypie分享django模型历史记录(由django-simple-history创建)。
问题是,如何为此目的准备ModelResource
。
model.history
经理可以访问模型历史记录。因此,可以通过model.history.all()
我想获得什么?例如。我有django模型Task
和API端点:
http://127.0.0.1/api/v1/task
- 显示所有任务列表http://127.0.0.1/api/v1/task/1
- 显示选择任务的详细信息http://127.0.0.1/api/v1/task/1/history
- 显示任务编号的历史记录。 1 前两个链接显示ModelResource
的默认行为。我现在有什么?
class TaskResource(ModelResource):
class Meta:
# it displays all available history entries for all task objects
queryset = Task.history.all()
resource_name = 'task'
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/history$" % (self._meta.resource_name,),
self.wrap_view('get_history'),
name="api_history"),
]
def get_history(self, request, **kwargs):
#...
get_history
应该返回包含历史记录条目的包..但是这个方法应该怎么样?
我想,我需要创建包含所需数据的包,但不知道我该怎么做。
有人有简单历史和tastypie的经验来呈现一些简单的例子吗?
答案 0 :(得分:0)
看来,解决方案比我想象的要简单。也许有人在功能中使用它:
class TaskHistoryResource(ModelResource):
class Meta:
queryset = Task.history.all()
filtering = { 'id' = ALL }
class TaskResource(ModelResource):
history = fields.ToManyField(AssetTypeHistoryResource, 'history')
class Meta:
# it displays all available history entries for all task objects
queryset = Task.history.all()
resource_name = 'task'
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/(?P<pk>\w[\w/-]*)/history$" %(self._meta.resource_name,),
self.wrap_view('get_history'),
name="api_history"),
]
def get_history(self, request, **kwargs):
try:
bundle = self.build_bundle(data={'pk': kwargs['pk']}, request=request)
obj = self.cached_obj_get(bundle=bundle, **self.remove_api_resource_names(kwargs))
except ObjectDoesNotExist:
return HttpGone()
except MultipleObjectsReturned:
return HttpMultipleChoices("More than one resource is found at this URI.")
history_resource = TaskHistoryResource()
return history_resource.get_list(request, id=obj.pk)
有点改变了解决方案: http://django-tastypie.readthedocs.org/en/latest/cookbook.html#nested-resources
基本上,需要使用历史记录条目创建其他资源。 get_history
方法使用id
字段上的适当过滤器创建并返回其实例(在django-simple-history id
字段中包含主要对象的id
。修订主键名{ {1}})
希望,这将有助于某人。