How to validation fields for TabularInline in django admin?

I create a BaseInlineFormSet like this:

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

and use this formset in my TabularInline class:

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

but i got this error:

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

Had the same issue,

changed forms.models.BaseInlineFormSet to adminsortable2.admin.CustomInlineFormSet
Since SortableTabularInline inhertits from SortableInlineAdminMixin

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

which uses CustomInlineFormSet as formset

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__  

so try changing to

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

and it might resolve the issue.

Back to Top