2017-01-20 4 views
0

я в настоящее время обучения 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() 
+0

Или я должен изменить свое мышление и сделать следующее: класс Deduction (models.Model): –

+1

Причина ваших проблем в том, что вы пытаетесь добавить два внешних ключа в Pledge from Reward. В таблице может быть только один внешний ключ другого. Вы уже определили not_taxable в Reward, поэтому вам не нужно создавать дополнительный в Pledge. – postoronnim

ответ

0

Спасибо, @postoronnim за замечать и объяснять, что ... Я удалили его, а затем добавили его в admin.py, который я также отрицал Тед.

 Смежные вопросы

  • Нет связанных вопросов^_^