gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:18:59 30 4
gpt4 key购买 nike

我有一个带有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/

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