如何对作为完善模型外键的特定客户的所有完善进行汇总?

2024-04-25 15:06:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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>

如何计算作为完成交易外键的VipC客户的完成交易金额


Tags: nameselftrueverbosegetreturnmodelsdef
1条回答
网友
1楼 · 发布于 2024-04-25 15:06:37

根据设计,您的实现一点也不好

你应该使用至少2种模式来实现你想要实现的目标,我甚至会说3种:

  • 与“食物”类有许多联系的食物
  • 食物((根据您的喜好命名)哪些将是您的不同食物)具有食物类别的外键
  • 食品分类(按照您的意愿命名)

否则,这意味着你只能吃一份含有1份甜点的混合餐。如果我要两份甜点怎么办

也就是说,你可以通过浏览一个包含所有与你的组合相关联的“食物”的查询集,轻松地检索到一个“组合”的总数。您可以在python property中执行此操作(因为可以计算的所有内容都不需要存储(理想情况下))

相关问题 更多 >