django reversion的管理集成非常简单。
当我访问127.0.0.1/admin
时,我可以选择让员工用户恢复已删除的对象或查看以前的版本。
但这只是来自管理方面。如何为历史对象提供公共视图?我试图通过Django-REST-Framework提供历史记录访问。
答案 0 :(得分:4)
Version (from reversion.models import Version)
'versions'
创建资源
将以下网址格式添加到prepend_urls
到已启用恢复的资源:
url(r'^(?P<resource_name>{})/(?P<pk>\d+)/history{1}$'.format(self._meta.resource_name, trailing_slash()), self.wrap_view('dispatch_history'), name='history')
将以下代码粘贴到资源中:
def dispatch_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()
_versions = reversion.get_for_object(obj)
versions = []
for version in _versions:
_resource = api.canonical_resource_for('versions')
_bundle = _resource.build_bundle(version)
_bundle = _resource.full_dehydrate(_bundle)
versions.append(_bundle)
return self.create_response(request, versions)
免责声明:此代码尚未经过测试,如果一次性使用,则称赞主。
PS:我很快就会与DRF实施类似的事情。完成后会更新答案。
class VersionableModelViewSetMixin(viewsets.ModelViewSet):
@detail_route()
def history(self, request, pk=None):
_object = self.get_object()
_versions = reversion.get_for_object(_object)
_context = {
'request': request
}
_version_serializer = VersionSerializer(_versions, many=True, context=_context)
# TODO
# check pagination
return Response(_version_serializer.data)
在包含已使用django-reversion注册的模型的所有视图中包含此Mixin。
希望这有点帮助。
最佳!!