【问题标题】: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"]
它可能会解决问题。