Получение разницы в количестве между 2 разными полями модели django?

#python #django #django-models

#python #django #django-модели

Вопрос:

У меня здесь 2 таблицы базы данных django

 class Inventory(models.Model):
     product_name = models.CharField(max_length = 100)
     qty = models.PositiveIntegerField()

class Order(models.Model):
     product = models.ForeignKey(Inventory, on_delete = models.CASCADE )
     qty = models.PositiveIntegerField()
  

Я хотел бы иметь страницу таблицы инвентаризации, на которой я могу видеть общее количество, оставшееся в инвентаре (например: Инвентарь.кол-во — Order.qty) .

как это сделать в Django?

Ответ №1:

Вы можете аннотировать Inventory qty минус сумму связанных с Order :

 from django.db.models import F, Sum

Inventory.objects.annotate(
    qty_left=F('qty') - Sum('order__qty')
)  

Inventory Объекты, возникающие в результате этого QuerySet , будут иметь дополнительный атрибут .qty_left , который содержит qty Inventory минус сумму qty s связанных Order s.

Комментарии:

1. Я собираюсь сделать это на моделях Django или в views.py ?

2. @Bwakarot41: в представлении, где вы отображаете Inventory s с соответствующим количеством слева.

3. Большое вам спасибо, сэр. Попробую это сейчас.

4. Здравствуйте, сэр. Как я собираюсь использовать это в шаблоне Django?

5. @Bwakarot41: как уже было сказано, объекты имеют дополнительный атрибут, поэтому, если вы выполняете итерацию по Inventory объектам, вы можете отобразить его с {{ inventory.qty_left }} помощью .