나는 문제는 오래 전에 질문을 받았다 알고 있지만, 나는이 같은 문제 고투 이후, 나는 그것이 유용한 것 같아요.
여기서 중요한 것은 테이블 형식 admin 양식에 포함 된 사용자 정의 formset을 정의한 다음 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