我在Django管理员中有一个表格内联模型.我需要1个字段在创建后不可更改,但将其设置为readonly(通过readonly_fields),工作正常,但在单击"添加其他项目"而不是下拉列表时将字段转换为标签.
有没有办法保持字段只读,但仍允许使用正确的字段输入创建新项目?
谢谢!
托马斯
编辑:管理通过自定义小部件来计算出来
class ReadOnlySelectWidget(forms.Select):
def render(self, name, value, attrs=None):
if value:
final_attrs = self.build_attrs(attrs, name=name)
output = u'<input value="%s" type="hidden" %s />' % (value, flatatt(final_attrs))
return mark_safe(output + str(self.choices.queryset.get(id=value)))
else:
return super(ReadOnlySelectWidget, self).render(name, value, attrs)
Run Code Online (Sandbox Code Playgroud)
如果有值,它只会将其变为隐藏,在每种情况下都不会起作用(仅适用于1个只读字段).
请原谅我,如果之前已经回答过,我找不到答案,其中验证取决于内联表格的汇总.
一点背景:我正在为一家保险经纪人做一个网站,该网站有"政策"和该政策的"全面委员会".还有"经销商"被添加到"政策"中,并附带佣金(可以有任意数量的经销商).经销商之间的佣金总额必须低于佣金总额.
我有一个策略的admin.ModelForm,下面我有一个admin.InlineTabular,通过"添加"按钮可以有多个经销商,这一切都很完美.
但是,我似乎无法弄清楚如何对它们进行验证,因此我基本上可以将所有佣金加起来然后如果它大于总佣金则抛出ValidationError.
我已经尝试过clean()但是如果它甚至可用,我不知道如何访问InlineTabular清理数据!
在此先感谢您的帮助!
托马斯