У меня есть форма с KeywordInline
. Когда я добавляю новый объект с помощью формы, у встроенного набора форм есть js-ссылка для добавления новой формы в набор форм. Недавно добавленные формы имеют кнопку удаления с поддержкой js (отметка x справа).
KeywordInline
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 []
KeywordFromset
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 поднимется, эти кнопки удаления исчезнут с самого начала. Поэтому, если я ошибочно добавил ключевое слово, я не могу его удалить.
Это нормальное поведение? А как сделать так, чтобы ссылки для удаления сохранялись?
Любая помощь очень ценится.