use*_*888 16 django validation inline admin
请原谅我,如果之前已经回答过,我找不到答案,其中验证取决于内联表格的汇总.
一点背景:我正在为一家保险经纪人做一个网站,该网站有"政策"和该政策的"全面委员会".还有"经销商"被添加到"政策"中,并附带佣金(可以有任意数量的经销商).经销商之间的佣金总额必须低于佣金总额.
我有一个策略的admin.ModelForm,下面我有一个admin.InlineTabular,通过"添加"按钮可以有多个经销商,这一切都很完美.
但是,我似乎无法弄清楚如何对它们进行验证,因此我基本上可以将所有佣金加起来然后如果它大于总佣金则抛出ValidationError.
我已经尝试过clean()但是如果它甚至可用,我不知道如何访问InlineTabular清理数据!
在此先感谢您的帮助!
托马斯
Thi*_*t J 25
我知道很久以前就问过这个问题,但是由于我遇到了同样的问题,我认为这可能是有用的.
这里的关键是定义一个自定义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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7375 次 |
| 最近记录: |