如何根据某些条件从 django 模型管理界面中止模型实例删除
我想根据某些条件从 django admin 中止模型删除。
我尝试重写 delete_queryset(self, request, queryset)
方法。
class MyModelAdmin(ModelAdmin):
def delete_queryset(self, request, queryset):
if not MyModel.objects.filter(is_active=True).exists():
message = "Error message"
raise ValidationError(message)
super().delete_queryset(request, queryset)
这是行不通的,因为 django 在这个阶段不处理异常。
在 Django 文档中找到了这个: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_deleted_objects
但我不知道如何从这里重定向到 Django管理页面,其中列出了所有模型实例并向用户显示错误消息。
I want to abort model deletion from django admin based on some condition.
I tried overriding delete_queryset(self, request, queryset)
method.
class MyModelAdmin(ModelAdmin):
def delete_queryset(self, request, queryset):
if not MyModel.objects.filter(is_active=True).exists():
message = "Error message"
raise ValidationError(message)
super().delete_queryset(request, queryset)
This doesn't work since django does not handles exception at this stage.
Found this in Django documentation: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_deleted_objects
But I am not sure how can I redirect from here to Django admin page where all model instances are listed and display the error message to user.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以覆盖
.has_delete_permission(…)
方法 [Django-doc]:这里
obj
是将要删除的对象已删除。例如,如果您想防止删除is_active
为True
的对象,您可以使用:You can override the
.has_delete_permission(…)
method [Django-doc]:Here
obj
is the object that will be removed. For example if you want to prevent removing an object withis_active
isTrue
, you can work with: