Как суммировать все суммы для определенного клиента, который является внешним ключом в модели? - PullRequest
0 голосов
/ 20 сентября 2019
class Consommation(models.Model):
    entree = models.ForeignKey(Entree, models.CASCADE, verbose_name="L'entree", null=True, blank=True)
    food = models.ForeignKey(Meals, models.CASCADE, verbose_name='Plat de resistance', null=True, blank=True)
    dessert = models.ForeignKey(Dessert, models.CASCADE, verbose_name='Dessert', null=True, blank=True)
    boisson = models.ForeignKey(Boisson, models.CASCADE, verbose_name='Boisson', null=True, blank=True)
    autres = models.ForeignKey(Autres, models.CASCADE, verbose_name='Snacks', null=True, blank=True)
    consomme_le = models.DateTimeField(default=timezone.now, editable=False)
    vipcustomer = models.ForeignKey(VipCustomer, models.CASCADE, null=True, blank=True,
                                    verbose_name='Client prestigieux', related_name='vip_consommations')

    def get_absolute_url(self):
        return reverse('clients:consommation_detail', kwargs={'pk': self.pk})

    def __str__(self):
        return 'Consommation numero :' + str(self.id)

    @staticmethod
    def get_nom(item, _default=' '):
        if item:
            return item.nom
        return _default

    @staticmethod
    def get_price(item, _default=0):
        if item:
            return item.price
        return _default


    def total_consommation(self):
        get_price = Consommation.get_price
        return get_price(self.entree) + get_price(self.food) + get_price(self.dessert) + get_price(
            self.boisson) + get_price(self.autres)

Я пытался получить общее количество клиентов:

def total(self):
    return self.vipcustomer.vip_consommations.annotate(Sum(self.total_consommation()))

в шаблоне, который у меня есть:

{% for consommation in vipcustomer.vip_consommations.all %}
<ul>
    <li>
       <a href="{% url 'clients:consommation_detail' pk=consommation.pk %}">
    </li>
</ul>
{% endfor %}
Total : <strong>{{ vipcustomer.vip_consommations.total}} MRO</strong>

Как сложить суммы дляVIP-клиент, который является внешним ключом к завершению?

1 Ответ

0 голосов
/ 20 сентября 2019

По своей конструкции ваша реализация совсем не годится.

Вы должны использовать как минимум 2 модели для достижения того, что вы пытаетесь, и я бы даже сказал 3:

  • Совпадение с many2many родством с классом «Еда».
  • Еда ((назовите ее, как вы хотите), которая будет вашим различным продуктом) с внешним ключом к FoodCategory
  • FoodCategory (назовите это какВы хотите)

В противном случае это означает, что вы можете иметь Консомацию только с 1 десертом.Что если я захочу взять 2 десерта?

С учетом вышесказанного вы можете легко получить общую сумму «Консомации», просматривая набор запросов, в котором содержится каждая «Еда», связанная с вашей Консоммацией.Вы можете сделать это в свойстве python (потому что все, что можно вычислить, не нужно хранить (в идеале))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...