代码之家  ›  专栏  ›  技术社区  ›  CodeSpent

追加到queryset项

  •  0
  • CodeSpent  · 技术社区  · 7 年前

    项目模型 (表示产品,如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.name
    

    即时模型 (表示序列化的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
    

    索引视图 enter image description here

    指标函数

    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,以及 手上 它们是这些项的序列化实例。在我的 指标函数 我通过了一个 all() 查询到 索引视图 在里面 语境 .

    我可以查询 OnHand.objects.filter(product_id=item.pk) 得到每个的数量 项目 然而,在我目前的做事方式中,我不确定我如何将这个价值传递给前端,同时保持它的关系,如果这有意义的话。

    我想 item.quanity 基本上代表了那个特定项目的数量。我在找什么?我最初的想法是追加到查询集,但我不确定如何这样做。

    1 回复  |  直到 7 年前
        1
  •  2
  •   schillingt    7 年前

    你在找 annotate .

    from django.db.models import Count
    items = Item.objects.annotate(
        quantity=Count('onhand_set__id'),
    )
    

    根据您的使用情况,您可能需要通过 distinct=True Count .