【发布时间】:2019-01-12 21:01:38
【问题描述】:
我有 2 个模型,Item 代表一个产品,OnHand 代表每个单独的序列化产品。它们由 product_id 的 ForeignKey 绑定。
物品型号:
class Item(models.Model):
name = models.CharField(max_length=100)
description = models.CharField(max_length=100)
manufacturer = models.ForeignKey('Manufacturer', blank=True, null=True, on_delete=models.SET_NULL)
introduction = models.DateField(auto_now=True)
is_retired = models.BooleanField(default=False)
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.name
手把手模型:
class OnHand(models.Model):
name = models.CharField(max_length=100)
serial = models.CharField(max_length=80)
asset = models.CharField(max_length=20)
product = models.ForeignKey(Item, blank=True, null=True, on_delete=models.CASCADE)
def __str__(self):
return self.serial
在我的 Index 视图中,我有一个表格,其中显示了这些产品并计算了数量。为此,我需要计算存在匹配 product_id 的 OnHand 对象的数量。
索引:
def index(request):
items = Item.objects.all()
quanity = count_onhand(items)
context = {
'items':items,
}
print(items)
return render(request, 'index.html', context)
count_onhand:
def count_onhand(items):
for item in items:
count = OnHand.objects \
.filter(product_id=item.product_id) \
.count()
因为这些将进入相同的视图并且需要维护它们的顺序,所以我认为最好的方向是附加到 Item 查询集,然后附加到我将发送回的列表中原始项目,附加数量。
编辑:我发现上述方法不是一个明智的方法,而是将其留在那里作为上下文。
我想要做的是获取与给定 Item 相关的所有 OnHand 对象的计数。 prefetch_related() 似乎接近我想要的,但似乎只适用于多对多(据我所知)。
我可以使用OnHand.objects.filter(product_id=item.pk).count(),但我不确定这是否是最标准的方法。
【问题讨论】:
-
我现在正在阅读一篇关于预取的文章,对此有点困惑,但认为这可能是我要找的吗?
标签: python django python-3.x django-models django-views