Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用嵌套循环迭代django模板中的多个查询集_Python_Django_Loops_Dictionary_Templates - Fatal编程技术网

Python 使用嵌套循环迭代django模板中的多个查询集

Python 使用嵌套循环迭代django模板中的多个查询集,python,django,loops,dictionary,templates,Python,Django,Loops,Dictionary,Templates,我正在制作一个酒店页面,并为预订和房间制作了模型。 我想在表中显示与房间相关的预订,并将相关预订放在特定房间的下方 我在这里显示views.py文件中的代码: def vaskehjelp(response): available_rooms = Room.objects.filter(available=True) room_nums = [] context = {} for room in available_rooms: related_bookings = Booking.ob

我正在制作一个酒店页面,并为预订和房间制作了模型。 我想在表中显示与房间相关的预订,并将相关预订放在特定房间的下方

我在这里显示views.py文件中的代码:

def vaskehjelp(response):
available_rooms = Room.objects.filter(available=True)
room_nums = []
context = {}
for room in available_rooms:
    related_bookings = Booking.objects.filter(room=room)
    if related_bookings:
        room_nums.append(room.room_no)
        context[room.room_no] = related_bookings

context["room_nums"] = room_nums
context["available_rooms"] = available_rooms
print(context)
return render(response, "../templates/se_vaskbare_rom.html", context)
<table class="table table-striped table-dark">
            <tr class="thead-dark">
                <th scope="col">Room No.</th>
                <th scope="col">Capacity</th>
                <th scope="col">Room Type</th>
            </tr>
            {% for item in available_rooms %}
                <tr scope="row">
                    <td>{{ item.room_no }}</td>
                    <td>{{ item.capacity }}</td>
                    <td>{{ item.room_type }}</td>
                </tr>
                {% if item.room_no in room_nums %}
                    {% for booking in item.room_no %}
                        <h1></h1>
                        <tr scope="row">
                            <td>{{ booking.cin_date }}</td>
                            <td>ku</td>
                            <td>{{ booking.cout_date }}</td>
                        </tr>
                    {% endfor %}
                {% endif %}
            {% endfor %}
        </table>
下面是我的模板文件中的代码:

def vaskehjelp(response):
available_rooms = Room.objects.filter(available=True)
room_nums = []
context = {}
for room in available_rooms:
    related_bookings = Booking.objects.filter(room=room)
    if related_bookings:
        room_nums.append(room.room_no)
        context[room.room_no] = related_bookings

context["room_nums"] = room_nums
context["available_rooms"] = available_rooms
print(context)
return render(response, "../templates/se_vaskbare_rom.html", context)
<table class="table table-striped table-dark">
            <tr class="thead-dark">
                <th scope="col">Room No.</th>
                <th scope="col">Capacity</th>
                <th scope="col">Room Type</th>
            </tr>
            {% for item in available_rooms %}
                <tr scope="row">
                    <td>{{ item.room_no }}</td>
                    <td>{{ item.capacity }}</td>
                    <td>{{ item.room_type }}</td>
                </tr>
                {% if item.room_no in room_nums %}
                    {% for booking in item.room_no %}
                        <h1></h1>
                        <tr scope="row">
                            <td>{{ booking.cin_date }}</td>
                            <td>ku</td>
                            <td>{{ booking.cout_date }}</td>
                        </tr>
                    {% endfor %}
                {% endif %}
            {% endfor %}
        </table>

以下是打印(上下文)的结果:

class Room(models.Model):
room_choices = [('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('F', 'Firemannsrom')]
room_no = models.CharField(max_length=5)  # primary key
available = models.BooleanField(default=False)
capacity = models.IntegerField(default=None)
room_type = models.CharField(choices=room_choices, max_length=1, default=None)
price = models.IntegerField( blank=True, null=True)

def __str__(self):
    return "Romnr: " + str(self.room_no) + " -- type:" + str(self.room_type)
{'100': <QuerySet [<Booking: Bruker: email -- id:27 -- Inndato: 2020-03-27 -- Utdato: 2020-03-29 -- Romnr: 100 -- type:S>]>, '103': <QuerySet [<Booking: Bruker: olaNordmann -- id:26 -- Inndato: 2020-03-07 -- Utdato: 2020-03-15 -- Romnr: 103 -- type:D>]>, 'room_nums': ['100', '103'], 'available_rooms': <QuerySet [<Room: Romnr: 100 -- type:S>, <Room: Romnr: 103 -- type:D>, <Room: Romnr: 106 -- type:F>, <Room: Romnr: 101 -- type:S>]>}
{'100':,'103':,'room_nums':['100','103'],'available_rooms':}

提前谢谢

您引用的是Room类中定义的CharField,而不是Booking queryset

一个快速的解决方案可能是通过以下方式更改代码:

{% for booking in item.related_bookings %}
    <h1></h1>
    <tr scope="row">
        <td>{{ booking.cin_date }}</td>
        <td>ku</td>
        <td>{{ booking.cout_date }}</td>
    </tr>
{% endfor %}
但我相信最简单的解决办法是:

def vaskehjelp(response):
    context = {}
    available_rooms = Room.objects.filter(available=True).prefetch_related('Room')
    context["available_rooms"] = available_rooms
    return render(response, "../templates/se_vaskbare_rom.html", context)
{%用于可用\u房间%中的项目]
{{item.room_no}
{{item.capacity}
{{item.room_type}
{%在项目中预订。房间%}
{{booking.cinu date}
库
{{booking.cout_date}
{%endfor%}
{%endfor%}

您确定相关预订不会返回空查询集吗?这样您就不需要使用django模板浏览任何项目。此外,你能给我房间和预订课程的定义吗?是的,我现在就添加它们!我已经打印了上下文列表的结果,它充满了信息是的!现在添加。我现在也添加了打印(上下文)结果。谢谢!第一个建议奏效了,我只需更改“vaskehjelp”函数的第8行,但我认为这就是您所需要的!另一个建议不起作用,或者至少它给了我这个错误:在房间对象上找不到'Room','Room'是一个无效的参数,无法预取与_相关的()
{% for item in available_rooms %}
    <tr scope="row">
        <td>{{ item.room_no }}</td>
        <td>{{ item.capacity }}</td>
        <td>{{ item.room_type }}</td>
    </tr>
    {% for booking in item.Room %}
        <h1></h1>
        <tr scope="row">
            <td>{{ booking.cin_date }}</td>
            <td>ku</td>
            <td>{{ booking.cout_date }}</td>
        </tr>
    {% endfor %}
{% endfor %}