from django.forms.models import BaseInlineFormSet
class MyInlineFormSet(BaseInlineFormSet):
@property
def deleted_forms(self):
deleted_forms = super(MyInlineFormSet, self).deleted_forms
for i, form in enumerate(deleted_forms):
# Use form.instance to access object instance if needed
if some_criteria_to_prevent_deletion:
deleted_forms.pop(i)
return deleted_forms
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
我找到了一个非常简单的解决方案,可以悄悄地避免不必要的删除某些内联线。您只需重写delete_forms属性方法。 这不仅适用于管理,也适用于常规内联。在
另一种方法是禁用
DELETE
复选框。 此解决方案的优点是向用户提供视觉反馈,因为用户将看到一个灰显的复选框。在这段代码利用了django1.9中添加的Field.disabled属性。正如文档中所说,“即使用户篡改了提交给服务器的字段值,它也会被忽略,取而代之的是表单初始数据中的值”,因此您不需要添加更多代码来防止删除。在
解决方案如下(不需要HTML代码):
在管理文件中,定义以下内容:
相关问题 更多 >
编程相关推荐