Как сделать валидацию полей для TabularInline в админке django?

Я создаю BaseInlineFormSet следующим образом:

class ProductPictureRequiredFormSet(forms.models.BaseInlineFormSet):
    def clean(self):
        if self.cleaned_data["image"] == None:
            raise ValidationError("error")
        return self.cleaned_data["image"]

и используем этот набор форм в моем классе TabularInline:

class ProductPictureAdminInline(SortableTabularInline):
    formset = ProductPictureRequiredFormSet
    fields = ("title", "image", "is_default", "order", "created_by", "created_at", "updated_at")
    readonly_fields = ("created_by", "created_at", "updated_at")
    model = ProductPicture
    extra = 3

но я получил эту ошибку:

BaseFormSet.__init__() got an unexpected keyword argument 'default_order_direction'

У меня такая же проблема,

изменил forms.models.BaseInlineFormSet на adminsortable2.admin.CustomInlineFormSet
. Поскольку SortableTabularInline наследуется от SortableInlineAdminMixin

class SortableTabularInline(SortableInlineAdminMixin, admin.TabularInline):
    template = 'adminsortable2/edit_inline/tabular-django-{0}.{1}.html'.format(*DJANGO_VERSION)

который использует CustomInlineFormSet в качестве набора форм

class CustomInlineFormSet(CustomInlineFormSetMixin, BaseInlineFormSet):
    pass

class SortableInlineAdminMixin:
    formset = CustomInlineFormSet
    def __init__(self, parent_model, admin_site):
        if parent_model in admin_site._registry:
            assert isinstance(admin_site._registry[parent_model], SortableAdminBase), \
                "{} must inherit from SortableAdminBase since {} inherits from SortableInlineAdminMixin.".format(
                    admin_site._registry[parent_model], self.__class__.__name__  

попробуйте изменить на

class ProductPictureRequiredFormSet(adminsortable2.admin.CustomInlineFormSet):
    def clean(self):
        if self.cleaned_data["image"] == None:
            raise ValidationError("error")
        return self.cleaned_data["image"]

и это может решить проблему.

Вернуться на верх