django - 如果引发ValidationError,则删除链接在Django admin嵌入式表单集中消失。

标签 django django-admin django-forms django-validation

我有一个带有KeywordInline的表格。当我使用表单内联表单集添加新对象时,有一个js链接可将新表单添加到表单集中。新添加的表单具有启用了js的删除按钮(右侧带有x标记)。

关键字内联

class KeywordInline(admin.TabularInline):
    fields = ('word',)
    model = models.Keyword
    formset = forms.KeywordFromset
    verbose_name = _('Keyword')
    verbose_name_plural = _('Keywords')
    extra = 1
    can_delete = True

    def get_readonly_fields(self, request, obj=None):
        if obj:
            if str(obj.status) == 'Finished':
                self.extra = 0
                self.can_delete = False
                self.max_num = obj.keyword_set.count()
                return ('word',)

        self.extra = 1
        self.can_delete = True
        self.max_num = None
        return []

关键字发件人
class KeywordFromset(BaseInlineFormSet):
    def clean(self):
        super(KeywordFromset, self).clean()
        formset_keywords = set()
        for form in self.forms:
            if not getattr(form, 'cleaned_data', {}).get('word', None):
                keyword = None
            else:
                keyword = form.cleaned_data['word']
            if keyword in formset_keywords:
                form._errors['word'] = ErrorList([_(self.get_unique_error_message([_('Keyword')]))])
            else:
                formset_keywords.add(keyword)

现在,如果我点击保存按钮,并且ValidationError上升,则这些删除按钮将从起点消失。因此,如果我错误地添加了错误的关键字,则无法将其删除。

这是正常行为吗?以及如何使删除链接持续存在?

任何帮助深表感谢。

最佳答案

对于尚未触发到ValidationError的内联函数,没有删除链接,因为它们尚未保存到数据库,因此没有删除链接。

我意识到这是不一致的行为(因为您可以在单击“保存”按钮之前删除这些行,但是一旦它们触发了验证错误就不能这样做),但是它是Django正常的默认方式。

要解决此问题,您可以override the template for inline并使删除按钮显示出来,尽管存在验证错误。

关于django - 如果引发ValidationError,则删除链接在Django admin嵌入式表单集中消失。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7553108/

相关文章:

django - 覆盖 django 管理分页以及 url 参数

python - 使用表单集前缀时缺少 ManagementForm 数据

基于 Django 类的 View 。对不同的 url 使用相同的自定义类

django - 如何在gunicorn(django)+ nginx + docker中更改缓冲区大小

django-staticfiles 破坏了管理界面

jquery - Django - clean() 具有隐藏形式

python - 即使引发了 ValidationError,表单在单元测试中仍然有效

python - Django 自引用模型过滤器ForeignKey

python - Django - 根据用户组过滤下拉选项

mysql - 仅显示 django 模型管理中其他模型中的唯一记录