gpt4 book ai didi

python - Django Admin - 如何防止删除某些内联

转载 作者:行者123 更新时间:2023-11-28 20:08:12 26 4
gpt4 key购买 nike

我有 2 个模型 - 例如,Book 和 Page。Page 有一个指向 Book 的外键。

每个页面都可以标记为“was_read”( bool 值),我想防止删除已读页面(在管理员中)。

在管理中 - Page 是 Book 中的一个内联模型(我不希望 Page 在管理中成为一个独立的模型)。

我的问题 - 我怎样才能实现已读取的页面不会被删除的行为?我使用的是 Django 1.4,我尝试了几种选择:

  1. 覆盖“删除”以抛出 ValidationError - 问题是管理员没有“捕获”删除时的 ValidationError 并且您会看到一个错误页面,因此这不是一个好的选择。
  2. 在 PageAdminInline 中重写该方法 - has_delete_permission - 这里的问题 - 它是针对每种类型的,因此我要么允许删除所有页面,要么不允许。

在不覆盖 html 代码的情况下,还有其他好的选择吗?

谢谢,李

最佳答案

解决方法如下(不需要HTML代码):

在管理文件中,定义以下内容:

from django.forms.models import BaseInlineFormSet

class PageFormSet(BaseInlineFormSet):

def clean(self):
super(PageFormSet, self).clean()

for form in self.forms:
if not hasattr(form, 'cleaned_data'):
continue

data = form.cleaned_data
curr_instance = form.instance
was_read = curr_instance.was_read


if (data.get('DELETE') and was_read):
raise ValidationError('Error')



class PageInline(admin.TabularInline):
model = Page
formset = PageFormSet

关于python - Django Admin - 如何防止删除某些内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14467848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com