为了账号安全,请及时绑定邮箱和手机立即绑定

附加到 QuerySet 项

附加到 QuerySet 项

沧海一幻觉 2021-10-10 16:52:16
Item Model(代表产品,如 MacBook)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.nameOnHand 模型(代表一个序列化的 MacBook)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)    tags = models.ManyToManyField(Tag)    def __str__(self):        return self.serial索引视图索引函数def index(request):    items = Item.objects.all()    context = {        'items':items,      }    print(items)    return render(request, 'index.html', context)模板/表格<table class="table table-hover">  <thead class="thead-light">    <tr>      <th>Item Id</th>      <th>Title</th>      <th>Manufacturer</th>      <th>On Hand</th>      <th>Category Id</th>    </tr>  </thead>  <tbody>    {% for item in items %}    <tr>      <td>{{ item.pk }}</td>      <td>{{ item.name }}</td>      <td>{{ item.manufacturer }}</td>      <td>{{ item.quanity }}</td>    </tr>    {% endfor %}    </tbody></table>本申请是一个库存管理系统,其可以在产品例如在MacBook Pro或iPhone 6,和OnHands其被序列这些项的实例。在我的功能指数我传递一个结果all()查询到索引视图中的上下文。我可以查询OnHand.objects.filter(product_id=item.pk)以获取每个Item 的数量,但是,在我目前的做事方式中,我不确定如何将该值传递给前端,同时保持其关系(如果有意义的话)。我想item.quanity基本上代表该特定项目的数量。我在寻找什么?我最初的想法是附加到 QuerySet 但我不知道该怎么做。
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

您正在寻找annotate。


from django.db.models import Count

items = Item.objects.annotate(

    quantity=Count('onhand_set__id'),

)

根据您的使用情况,您可能需要传递distinct=True给Count.


查看完整回答
反对 回复 2021-10-10
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信