django reversion 的管理员集成非常简单。当我访问时,127.0.0.1/admin
我可以选择让员工用户恢复已删除的对象或查看以前的版本。
但这仅来自管理员方面。如何为历史对象提供公共视图?我正在尝试通过 Django-REST-Framework 提供历史访问。
django reversion 的管理员集成非常简单。当我访问时,127.0.0.1/admin
我可以选择让员工用户恢复已删除的对象或查看以前的版本。
但这仅来自管理员方面。如何为历史对象提供公共视图?我正在尝试通过 Django-REST-Framework 提供历史访问。
Version (from reversion.models import Version)
为'versions'
将以下 url 模式添加到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)
将此 Mixin 包含在所有包含已使用 django-reversion 注册的模型的视图中。
希望这个对你有帮助。
最好的!!