Django - 默认字段值取决于其他字段值

时间:2016-08-21 15:55:32

标签: python django default-value


我在设置默认字段值时遇到问题。我想做什么?
我希望类中的价格套餐是Bill类中priceNoTax的默认值。如你所见,这三个类都是 逻辑连接。例如:账户1有一个id为1的包。这个包的价格是100.账户1的priceNoTax的默认值是100.

如何做到这一点?我是相对较新的,所以我需要帮助。

models.py

    for(Boolean b: bools){
        b=Boolean.FALSE;
    }

非常感谢!!!

3 个答案:

答案 0 :(得分:5)

或许将此添加到您的Bill类中?

def save(self, *args, **kwargs):
    if self.priceNoTax is None:
        self.priceNoTax = self.idAccount.idPackage.price
    super(Bill, self).save(*args, **kwargs)

答案 1 :(得分:5)

为什么你需要它成为一个领域?您是否看到有人想要在不将价格和税费更改为相应值的情况下更改总价格的原因?如果它真的不需要是一个字段,你可以把它变成一个方法。

class Bill(models.Model):
     date = models.DateField(default=datetime.now())
     tax = models.FloatField(default=0.20)
     priceNoTax = models.IntegerField()
     idAccount = models.ForeignKey(Account, on_delete=models.CASCADE, verbose_name="Account")

     def priceTax(self):
       return self.priceNoTax + (self.priceNoTax*self.tax)

     def __str__(self):
         return self.date

您仍然可以在{{ bill.priceTax }}的模板中以相同的方式使用它。在代码中,您需要使用bill.priceTax()

这样,无论税收或价格如何变化,含税价格都应该保持最新状态。

您还可以使用@property装饰器,以避免在代码中将其称为函数。

@property
def priceTax(self):
   return self.priceNoTax + (self.priceNoTax*self.tax)

有关详情,请参阅https://docs.djangoproject.com/en/2.0/topics/db/models/#model-methods

答案 2 :(得分:-2)

@kichik回答了如何使用模板标签显示默认值,我建议通过javascript实现自动计算。

当然,您必须验证用户输入或实施PublishStatuses.NotCompleted; // "Not Completed" 方法,正如@Chris Curvey所说。