gpt4 book ai didi

django - 内联表单的Django管理员验证取决于所有表单之间字段的总和

转载 作者:行者123 更新时间:2023-12-03 14:45:06 24 4
gpt4 key购买 nike

原谅我,如果以前已经回答过,我找不到答案,验证取决于内联表单的总和。

背景不多:我正在为一家保险经纪人制作一个网站,该网站具有该政策的“政策”和“总佣金”。在“政策”中还添加了“转销商”以及向其收取的佣金(可以有任意数量的转销商)。转销商之间的总佣金必须小于总佣金。

我有一个用于策略的admin.ModelForm,下面有一个admin.InlineTabular,可以通过“添加”按钮拥有多个转售商,并且这些都可以正常使用。

但是,我似乎无法弄清楚如何对它们进行验证,因此我基本上可以将所有佣金加起来,如果大于总佣金,则抛出ValidationError。

我已经尝试过clean()但不知道如何访问InlineTabular清除的数据(如果有的话)!

在此先感谢您的帮助!

汤玛士

最佳答案

我知道这个问题是很久以前问过的,但是由于我遇到了同样的问题,因此我认为它可能有用。

此处的关键是定义一个自定义表单集,以将其嵌入到表格管理表单中,然后覆盖该formset clean的方法。

这是一个示例:一个合成由composition_elements组成,每个composition_element都有一个percent字段,我想验证总百分比等于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)

关于django - 内联表单的Django管理员验证取决于所有表单之间字段的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com