【问题标题】:how to validation fields for TabularInline in django admin?如何在 django admin 中验证 TabularInline 的字段?
【发布时间】:2023-02-18 23:17:08
【问题描述】:

我像这样创建一个 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'

【问题讨论】:

    标签: python django django-admin django-modeladmin


    【解决方案1】:

    有同样的问题,

    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"]
    

    它可能会解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2020-07-25
      • 2016-08-01
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2015-01-07
      相关资源
      最近更新 更多