Django - 将模型字段复制到另一个字段

时间:2017-03-15 01:56:28

标签: python django debugging model

我做了很多搜索,但找不到合适的方法。 我想将一些模型对象数据复制到另一个模型对象数据。 我在下面添加了我的代码。我有3个型号。你可以看到我有一个FK, 与收据字段相关的收据模型。当我想添加Receiptitem对象时,我想复制金额,增值税和total_amount。 我没有解决保存方法。

用户将添加产品和收据。然后,当用户尝试选择ReceiptItem收据和产品下拉列表时,他将选择他想要的对象,其他内容将自动获取。我想这样做。

class Receipt(models.Model):
    amount = models.DecimalField(max_digits=5, decimal_places=2)
    vat = models.DecimalField(max_digits=5, decimal_places=2)
    total_amount = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return str(self.total_amount)

class ReceiptItem(models.Model):
    receipt = models.ForeignKey('Receipt', on_delete=models.CASCADE )
    product = models.ForeignKey('Product', on_delete=models.CASCADE)
    amount = models.DecimalField(max_digits=5, decimal_places=2)
    vat = models.DecimalField(max_digits=5, decimal_places=2)
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2)
    sub_total = models.DecimalField(max_digits=5, decimal_places=2)
    name = models.CharField(max_length=200)

class Product(models.Model):
    name = models.CharField(max_length=200)
    vat_rate = models.DecimalField(max_digits=5, decimal_places=2)
    amount = models.DecimalField(max_digits=5, decimal_places=2)

    def __str__(self):
        return self.name

1 个答案:

答案 0 :(得分:0)

如果您希望在保存ReceiptItem后复制数据,则可以重载此模型的save功能:

class ReceiptItem(models.Model):
    # your fields here
    def save(self, *args, **kwargs):
        self.vat = self.receipt.vat
        # copy the other data you need here

        # the line below calls Model.save() which commits
        # your changes to the database
        super(ReceiptItem, self).save(*args, **kwargs)

如果在将对象保存到数据库之前需要值,则另一个选项可以是设置ReceiptItem.__init__()中的值。