2017-03-24 119 views
0

我有两个模型MODELA和ModelB现在更新字段与另一个字段值动态地在Django

class ModelA(models.Model): 
    amount_per_product=models.PositiveIntegerField(default='', help_text="e.g 10000") 

class ModelB(models.Model): 
    no_of_product_needed=models.PositiveIntegerField() 
    amount_to_pay=models.PositiveIntegerField() 
    modela=models.ForeignKey(ModelA) 

,只要用户把一些如2no_of_product_needed领域,Django的应该显示的总金额,用户将在保存前支付amount_to_pay字段。因此,用户可以看到总金额,如果他/她想要购买,用户将点击购买,Django会将总金额保存在amount_to_pay字段中。

我写了一个pre_save钩子,但它不工作。无论何时在no_of_product_needed字段中插入号码,它都不会在amount_to_pay字段中显示总金额。

class ModelB(models.Model): 
    no_of_product_needed=models.PositiveIntegerField() 
    amount_to_pay=models.PositiveIntegerField() 
    modela=models.ForeignKey(ModelA) 


    def __init__(self, *args, **kwargs): 
     super(ModelB, self).__init__(*args, **kwargs) 
     pre_save.connect(self.before_buying, sender=ModelB) 


    def before_buying(self, sender, instance, *args, **kwargs): 
     initial= self.modela.amount_per_product 
     amt_needed= self.no_of_product_needed 
     final_amt=int(initial) * int(amt_needed) 
     self.amount_to_pay= self.final_amt 

我缺少什么?这可以在JS中完成吗?

回答

1

“的Django应该显示总金额的用户将在amount_to_pay场支付在保存前”

这不是Django的目标,以更新客户端视图。你pre_save方法不要更新模板。

如果您想通知用户amount_to_pay,您需要使用Javascript在客户端执行此操作。

+0

非常感谢您的支持!我也是这么认为。我仍然在寻找一个我可以用来做这件事的js函数。任何建议? – YoYo

+0

你可以使用jquery。您在变更事件上创建了一个监听器,并根据您的产品输入no。在函数回调中,更新amount_to_pay的值。 (只读输入)。 – Wilfried

相关问题