Django管理员内联计算字段未保存 [英] Django admin inline calculated field won't save
本文介绍了Django管理员内联计算字段未保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的内联中的一个字段需要计算。我重写了BaseInLineFormSet CLEAN方法,可以在那里进行计算,并在那里设置字段的值,但它不会保存到数据库中,因此也不会显示。该字段默认为零,顺便说一句,以防万一。以下是硬编码版本:
class EmployeeAssignmentInLineFormSet(BaseInlineFormSet):
def clean(self):
super(EmployeeAssignmentInLineFormSet, self).clean()
self.cleaned_data[0]['cost'] = 5000
我还尝试覆盖ModelAdmin中的SAVE_FORMSET-相同的结果:
def save_formset(self, request, form, formset, change):
formset.cleaned_data[0]['cost'] = 5000
formset.save()
当我仅在CLEAN中设置值时,我可以看到当它到达SAVE_FORMSET时它已经被设置,但在数据库中它仍然是零。我来错地方了还是怎么的?
推荐答案
似乎对此不太感兴趣,但为了完整起见,这就是我最终要做的。我无数次尝试在保存记录时保存该字段,但都失败了。简单地将某些内容放入CLEANED_DATA是不起作用的。我尝试了覆盖CLEAN、SAVE_MODEL、SAVE_REGRECTED、SAVE_FORMSET--没有效果。所以现在我在内联选项中:
readonly_fields = ('get_cost', )
fields = ('project', 'start_date', 'end_date', 'effort', 'role', 'get_cost')
def get_cost(self, obj):
if obj.effort and obj.cost == 0.0:
obj.cost = obj.employee._calculate_cost(obj.effort)
obj.save()
return obj.cost
get_cost.short_description = 'Cost'
当然需要条件,以避免每次加载内联表单集时都节省成本。在保存记录的其余部分之后保存字段似乎有些奇怪,但它确实有效。
这篇关于Django管理员内联计算字段未保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文