#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 }}
помощью .