я в настоящее время обучения Django ...Джанго: доступ к свойствам между классами и исполняющой математикой на них
При внесении залога, пользователь может выбрать награду. Вознаграждение имеет стоимость и вычитаемую стоимость. Например: может быть вознаграждение в размере 50 долларов США, но только 40 долларов из них вычитаются. Пользователь может пожертвовать $ 50 или больше, поэтому, если они пожертвуют 100 долларов США, все вычитается за исключением 10 долларов США.
У меня есть два класса: «Залог» и «Награда», и вам нужно сделать немного математики, используя новое поле в «Вознаграждение», чтобы определить, какая часть залога вычитается.
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» с задним ходом accessor для «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()
Или я должен изменить свое мышление и сделать следующее: класс Deduction (models.Model): –
Причина ваших проблем в том, что вы пытаетесь добавить два внешних ключа в Pledge from Reward. В таблице может быть только один внешний ключ другого. Вы уже определили not_taxable в Reward, поэтому вам не нужно создавать дополнительный в Pledge. – postoronnim