如何使用某个表单字段值计算并在另一个django管理表单中自动填充该计算值?

时间:2016-03-18 05:17:33

标签: python django

我想在rent_price的{​​{1}}中自动填充计算值:

models.py

admin.py

admin.py

class Book(models.Model):  
    ...  
    mrp        = models.DecimalField(max_digits = 9, decimal_places = 2)  
    rent_price = models.DecimalField(max_digits = 9, decimal_places = 2)  
    ...  

2 个答案:

答案 0 :(得分:0)

您可以使用get_prepopulated_fields

而不是prepopulated_fields
class BookAdmin(admin.ModelAdmin):  
    ...  
    def get_prepopulated_fields(self, request, obj=None):
        prepopulated_fields = self.prepopulated_fields
        if obj:
            prepopulated_fields.update({
                'rent_price': get_rent_price_from_mrp(obj.mrp)
            })
        return prepopulated_fields

答案 1 :(得分:0)

看一下pre_save信号(根据您对Muhammads答案的评论,这是您需要的。)
在管理员中创建图书时,在保存django之前,将调用图书模型的pre_save方法,并根据您在管理表单中提交的mrp计算rent_price。 如果表单提交的验证失败,或者以另一种方式处理验证,您可能必须更改租金模型,允许它为空。

这是一个关于信号的合适教程:http://www.koopman.me/2015/01/django-signals-example/,其中包含指向django文档的链接。

但要注意,批量方法不会触发信号。