我正在开发一个库存管理网络应用程序,该应用程序允许组织中的团队分配用于存储物品的盒子。
有多个储藏室以及多个架子和部分。每个盒子都分配有一个项目。
我想在Django中编写一个查询集,以显示给定房间中有多少个空白空间(有多少个位置没有分配框的位置),例如上面的图片显示了房间A
房间:A 空白:4
这是我的代码的简化版本:
HTML:
{% for each_space in Room_data %}
{
<p>"Room": "Room {{each_space.loc_room}}",</p>
<p>"Empty Spaces": *** HERE I NEED HELP ***,</p>
},
{% endfor %}
型号:
class Location(models.Model):
loc_room = models.CharField()
loc_section = models.IntegerField()
loc_shelf = models.CharField()
class Box(models.Model):
box_contents = models.CharField()
project_assigned_to = models.ForeignKey()
Location = models.OneToOneField()
class Project(models.Model):
project_name = models.CharField()
project_manager = models.ForeignKey()
观看次数:
def dashboard(request):
Room_data = Location.objects.all()
return render(request, 'main_app/dashboard.html' , {"Room_data":Room_data})
今天很多时候我一直坚持这一点,所以我希望有人可能知道前进的最佳方向。预先谢谢你。
答案 0 :(得分:1)
您可以使用以下方法获取不含Box
的位置的列表:
Location.objects.filter(box__isnull=True)
或更简单:
Location.objects.filter(box=None)
对于给定的房间QuerySet
,我们可以获得具有Location
个这样的some_room
的{{1}}:
Location.objects.filter(box=None, loc_room=some_room)
这将导致查询如下:
SELECT location.*
FROM location
LEFT OUTER JOIN box ON location.id = box.Location_id
WHERE box.id IS NULL
AND location.loc_room = some_room
我们还可以通过以下方式计算Location
的数量:
Location.objects.filter(box=None, loc_room=some_room).count()
如果您要在每个房间中检索每个空位置,我们可以为这些位置添加注释,例如:
Location.objects.values(
'loc_room'
).filter(
box__isnull=True
).annotate(
nempty=Count('id')
).order_by('loc_room')
然后我们可以像这样打印这些:
{% for each_space in Room_data %}
<p>"Room": "Room {{ each_space.loc_room }}",</p>
<p>"Empty Spaces": {{ each_space.nempty }},</p>
{% endfor %}