Django:访问类之间的属性并对它们执行数学运算

时间:2017-01-20 22:11:24

标签: python django django-models

我目前正在学习Django ......

在做出承诺后,用户可以选择奖励。奖励具有价值和可抵扣价值。例如:可能有价值50美元的奖励,但只有40美元可以扣除。用户可以捐赠50美元或更多,所以如果他们捐赠100美元,除了10美元外,一切都可以扣除。

我有两个班级:"承诺"和"奖励"并且需要使用" Reward"中的新字段进行一些数学运算。确定可以扣除多少抵押。

class Pledge(models.Model):

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey()
    project = models.ForeignKey('Project')
    amount = models.DecimalField(decimal_places=2,max_digits=10,
        default=D('0.00'))
    reward = models.ForeignKey('Reward',blank=True,null=True,
        on_delete=models.SET_NULL)

我只是复制了上面的奖励属性,希望从奖励中提取not_taxable,但我得到了这个错误:projects.Pledge.not_taxable:(fields.E304)' Pledge.not_taxable'的反向访问者与Pledge.reward'。

的反向访问者发生冲突
    not_taxable = models.ForeignKey('Reward',blank=True,null=True,
        on_delete=models.SET_NULL)

...

    def get_deductible_total(self):
        return (self.amount - self.not_taxable)

    @property
    def deductible_total(self):
        return self.get_deductible_total()

...

class Reward(models.Model):
    project = models.ForeignKey('Project')
    title = models.CharField(max_length=255)
    pledge_level = models.DecimalField(decimal_places=2, max_digits=10)
    deductible = models.DecimalField(decimal_places=2, max_digits=10,default='0')
    description = models.TextField(blank=True)

...

    def get_not_taxable(self):
        return (self.pledge_level - self.deductible)

    @property
    def not_taxable(self):
        return self.get_not_taxable()

1 个答案:

答案 0 :(得分:0)

谢谢,@ posttoronnim注意到并解释说......我删除了它,然后将它添加到我也忽略的admin.py中。