在使用Django Simple History跟踪模型更改的Django Rest Framework应用程序中,如何强制用户为所有Destroy End Points传递Reason for Deletion
,然后将该原因传递给Django Simple History's Change Reason?
此外,对于具有删除级联的相关模型,是否会将该原因传递给相关的已删除条目?
更新
尝试在another question here on SO之后覆盖下面的destroy方法。问题是,删除后的changeReason即history_change_reason
位于何处?我以为它会成为历史表中的一列?但是,即使下面的代码有效,它也不存在,我无法找到保存原因的位置。
class DeleteViewSet(mixins.DestroyModelMixin):
def destroy(self, request, *args, **kwargs):
try:
if 'delete_reason' not in request.data.keys():
return Response(status=status.HTTP_400_BAD_REQUEST,data='{delete_reason: Invalid Delete Reason}')
else:
instance = self.get_object()
instance.changeReason = request.data['delete_reason']
instance.save()
self.perform_destroy(instance)
except Http404:
pass
return Response(status=status.HTTP_204_NO_CONTENT)
缺少历史记录更改原因列:
我在所有历史记录表中看到的唯一history_*
是:
1. history_id
2. history_date
3. history_type
4. history_user_id
我在任何历史记录表中都找不到history_change_reason
答案 0 :(得分:0)
确定。找到了我的两个问题的答案。
缺少历史记录更改原因列:
这是一个版本问题。 pip3.6 install --upgrade django-simple-history
然后迁移解决了这个问题。
删除作为混合的原因:
这可以通过检查是否提供了deletion_reason来实现。
class DeleteViewSet(mixins.DestroyModelMixin):
def destroy(self, request, *args, **kwargs):
try:
if 'delete_reason' not in request.data.keys():
return Response(status=status.HTTP_400_BAD_REQUEST,data='{delete_reason: Invalid Delete Reason}')
else:
instance = self.get_object()
instance.changeReason = request.data['delete_reason']
# instance.save() ==>Don't do this because it will cause a second instance to be saved in the history tables
self.perform_destroy(instance)
except Http404:
pass
return Response(status=status.HTTP_204_NO_CONTENT)
未解决:
在模型之间的关系中有delete_cascade时,将deletion_reason
传递给随后删除的所有表。