У меня есть эти модели:
status_choices = ['not received', 'received']
class Investment(Model):
# Offering
offering = models.ForeignKey(Offering, blank=False, null=False, on_delete=models.CASCADE)
invested = models.DecimalField(max_digits=9, default=0, decimal_places=2, blank=True, null=True)
status = models.CharField(max_length=200, choices=status_choices, blank=True, null=True, default='not received')
class Offering(Model):
...
Я хочу сделать свойство отображать сумму всех инвестиций внутри модели Offering.
Я сделал так:
@property
def amount_invested(self):
return Investment.objects.filter(offering_id=self.id).aggregate(Sum('invested'))['invested__sum'] or 0
Но я также хочу отобразить amount_invested, если status внутри модели Investment есть 'received'.
Могу ли я узнать, как я должен быть в состоянии сделать это?
@WillemVanOnsem да, только что получил





Вы можете отфильтровать investment_set и, таким образом, сохранить только Investment с status='received':
@property
def amount_invested(self):
return self.investment_set.filter(
status='received'
).aggregate(Sum('invested'))['invested__sum'] or 0спасибо, но что, если есть несколько статусов, которые мне нужно проверить? Я только что поставил получил но там статус_1, статус_2.
@ProsyArceno: вы используете status__in=['status_1', 'status_2'].
Итак, вы хотите только суммировать
investedсstatus='received'?