Django管理员内联计算字段未保存 [英] Django admin inline calculated field won't save

查看:13
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆