[英]How to properly make a query in Django?
我遇到了一个小问题。 我想构建一个适当的查询集来获取表示每个类别的费用数量的值,以这样显示。
这是我现在得到的:
class CategoryListView(ListView):
model = Category
paginate_by = 5
def get_context_data(self, *, category_object_list=None, **kwargs):
**categories = Category.objects.annotate(Count('expense'))
queryset = categories.values('expense__count')**
return super().get_context_data(
category_object_list=queryset,
**kwargs)
当然它不起作用,我有这样糟糕的桌子。 我想问题不在 HTML 中,而是在我完全错误的查询中......我该怎么办?
这是我的 HTML,以防需要它:
{% for category in object_list %}
<tr>
<td>
{{ category.name|default:"-" }}
</td>
<td>
{% for number in category_object_list %}
{{ number.expense__count }}
{% endfor %}
</td>
<td>
<a href="{% url 'expenses:category-update' category.id %}">edit</a>
<a href="{% url 'expenses:category-delete' category.id %}">delete</a>
</td>
{% endfor %}
</tr>
还有我的models.py:
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
def __str__(self):
return f'{self.name}'
class Expense(models.Model):
class Meta:
ordering = ('-date', '-pk')
category = models.ForeignKey(Category, null=True, blank=True,
on_delete=models.CASCADE)
name = models.CharField(max_length=50)
amount = models.DecimalField(max_digits=8, decimal_places=2)
date = models.DateField(default=datetime.date.today, db_index=True)
def __str__(self):
return f'{self.date} {self.name} {self.amount}'
您可以通过反向查找外键在模板中尝试这样做。 有关更多详细信息,请参阅文档。
{% for category in object_list %}
<tr>
<td>
{{ category.name|default:"-" }}
</td>
<td>
{{category.expense_set.all.count}}
</td>
<td>
<a href="{% url 'expenses:category-update' category.id %}">edit</a>
<a href="{% url 'expenses:category-delete' category.id %}">delete</a>
</td>
{% endfor %}
</tr>
现在在视图中,您可以使用ListView
传递所有类别
class CategoryListView(ListView):
model = Category
paginate_by = 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.