我知道這個問題是問在很久以前,但因爲我有同樣的問題掙扎,我想這可能是有用的。
這裏的關鍵是定義一個自定義表單嵌入到表格管理表單中,然後覆蓋formset clean方法。
下面是一個例子:一種組合物是由composition_elements,每個composition_element具有百分之領域,我想驗證的總百分比等於100
from django import forms
from django.forms.models import BaseInlineFormSet
from django.core.exceptions import ValidationError
from django.utils.translation import ugettext_lazy as _
from django.contrib import admin
from .models import Composition, CompositionElement
class CompositionElementFormSet(BaseInlineFormSet):
'''
Validate formset data here
'''
def clean(self):
super(CompositionElementFormSet, self).clean()
percent = 0
for form in self.forms:
if not hasattr(form, 'cleaned_data'):
continue
data = form.cleaned_data
percent += data.get('percent', 0)
if percent != 100:
raise ValidationError(_('Total of elements must be 100%%. Current : %(percent).2f%%') % {'percent': percent})
class CompositionElementAdmin(admin.TabularInline):
model = CompositionElement
formset = CompositionElementFormSet
class CompositionAdmin(admin.ModelAdmin):
inlines = (CompositionElementAdmin,)
admin.site.register(Composition, CompositionAdmin)
類似的問題:HTTP://計算器.com/questions/877723/inline-form-validation-in-django – utapyngo 2015-02-19 10:45:17