我试图找出如何使用另一个表中的计数添加字段。
我有一张桌子上有'项目'还有另一个任务'。这些任务对项目有一个外键。
models.py
class Item(MPTTModel):
item_title = models.CharField(max_length=250)
item_parent = TreeForeignKey('self', null=True, blank=True, related_name='children', db_index=True)
class Task(models.Model):
task_title = models.CharField(max_length=550)
item = models.ForeignKey('item.Item')
我查询的视图,并希望在每行项目中添加一个带有计数的列。
views.py
def index(request):
all_root_items = Item.objects.filter(item_parent__isnull=True)
context = {
'nodes': all_root_items ,
}
return render(request, 'tasks/index.html', context)
所以我希望all_root_items中的每个项目都有一个字段(例如' task_count')。分配给该项目的任务数量是多少。
我尝试了很多不同的想法。但都没有效果。
编辑以澄清我的问题。
all_root_item看起来像这样
items [
{"item_title" : "item 1", "item_parent" : ""},
{"item_title" : "item 2", "item_parent" : ""}
]
我想为每个项目添加任务计数。所以它看起来像这样
items [
{"item_title" : "item 1", "item_parent" : "", "task_count" : "6"},
{"item_title" : "item 2", "item_parent" : "", "task_count" : "2"}
]
答案 0 :(得分:0)
如果您想获取all_root_items中每个项目的所有任务,可以执行以下操作,
item_list = []
for item in all_root_items:
tasks = Task.objects.filter(item=item)
for task in tasks:
item_list.append({'item_title': task.item.item_title, 'item_parent': task.item.item_parent})
print item_list
答案 1 :(得分:0)
我设法解决了这个问题。这就是我改变了
<强> views.py 强>
def index(request):
all_root_items = Item.objects.filter(item_parent__isnull=True)
for item in all_root_items:
cntTasks = Task.objects.filter(item=item).count()
item.task_count = cntTasks
context = {
'nodes': all_root_items ,
}
return render(request, 'tasks/index.html', context)
在模板中,我可以调用我添加的计数:
for a in nodes
a.snag_count
endfor
答案 2 :(得分:0)
在 views.py 中编写您的操作,如下所示:
def index(request):
all_root_items = Item.objects.filter(item_parent__isnull=True)
item_list = []
for item in all_root_items:
tasks = Task.objects.filter(item=item)
item_list.append({'item_title': item.item_title, 'item_parent': item.item_parent, "task_count" : len(tasks) })
context = {
'nodes': item_list,
}
return render(request, 'tasks/index.html', context)
您正在计算包括每个项目在内的任务,并将其添加到对象数组中。