如何在Django模型中生成依赖于其他模型字段的派生字段?

时间:2020-04-24 14:37:19

标签: django python-3.x sqlite

这是我在models.py中的模型

class Purchase(models.Model):
    Purchase_id = models.AutoField(verbose_name='Purchase ID',primary_key=True)
    Employee_id = models.ForeignKey(Employee, on_delete= models.CASCADE,verbose_name='Employee ID')
    Distributor_id = models.ForeignKey(Distributor, on_delete= models.CASCADE,verbose_name='Distributor ID')
    Date_of_Purchase= models.DateField(verbose_name='Date Of Puchase',validators=[datevalid])
    Discount_in_percentage = models.FloatField(verbose_name='Discount(in percent)',validators=[nonneg,MaxValueValidator(100,'Discount can not be more than 100%%')])
    Tax_in_percentage = models.FloatField(verbose_name='Tax(in percent)',validators=[nonneg])
    Total_amount = models.FloatField(verbose_name='Total Amount',validators=[nonneg])
    Products=models.ManyToManyField(Products,through='Purchase_Consists_of')

    objects = models.Manager()


    def __str__(self):
        return str(self.Purchase_id)
    class Meta: 
        verbose_name_plural='Purchase'
        db_table='Purchase'

class Products(models.Model):
    Prod_code = models.AutoField(verbose_name='Product Code',primary_key=True)
    Product_name = models.CharField(verbose_name='Product Name',max_length=100)
    Quantity = models.CharField(verbose_name='Quantity(kg/L)',max_length=20)
    Rate = models.FloatField(verbose_name='Rate(per unit)',validators=[nonneg])
    Colour = models.CharField(verbose_name='Colour', max_length=50)
    Product_description = models.CharField(verbose_name='Product Description', max_length=50)
    Stock_level = models.IntegerField(verbose_name='Stock Level',validators=[nonneg])
    Shelf_life = models.IntegerField(verbose_name='Shelf Life',null=True,blank=True,validators=[nonneg])
    objects = models.Manager()
    def __str__(self):
        return str(self.Prod_code)
    class Meta:
        verbose_name_plural='Product'
        db_table='Products'

class Purchase_Consists_of(models.Model):
    Purchase_id = models.ForeignKey(Purchase, on_delete= models.CASCADE,verbose_name='Purchase ID')
    Prod_code = models.ForeignKey(Products, on_delete= models.CASCADE,verbose_name='Product Code')
    Quantity=models.CharField(verbose_name='Quantity',max_length=20)
    objects = models.Manager()
    def __str__(self):
        return str(self.Purchase_id)
    class Meta: 
        verbose_name_plural='Purchase Consists of'
        db_table='Purchase_Consists_Of'
        unique_together=(('Purchase_id'),('Prod_code'),)

当我在“产品”和“ Purchase_Consists_Of”表中输入“费率和数量”的值时,我希望“购买总额”模型自动计算并保存在数据库中。

这种关系是这样的:Purchase.Total_amount = Products.Rate * Purchase_Consists_Of.Quantity。

有什么办法吗?

0 个答案:

没有答案