Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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'
like image 483
Mahdi Kh Avatar asked Sep 08 '26 21:09

Mahdi Kh


1 Answers

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.

like image 147
armstrove Avatar answered Sep 10 '26 09:09

armstrove



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!