Saya membuat halaman hotel, dan telah membuat model untuk pemesanan dan kamar. Saya ingin menampilkan pemesanan yang terkait dengan kamar dalam tabel, dan pemesanan terkait diletakkan di bawah kamar tertentu.meja untuk kamar dan pemesanan

Dan kode dari file template saya di sini:

<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>

Masalahnya adalah elemen pemesanan dalam kode templat tampaknya tidak berfungsi. Saya tidak berhasil mengakses daftar pemesanan yang terkait dengan kamar yang dipilih saat ini. Seperti yang Anda lihat, saya memiliki loop for luar untuk beralih ke kamar, dan kemudian loop for dalam beralih ke pemesanan terkait (hanya jika kamar itu ada dalam daftar "room_nums". Masalahnya adalah (saya pikir) bahwa < kuat>untuk pemesanan di item.room_no tidak berfungsi, saya tidak mendapatkan info apa pun dari variabel pemesanan setidaknya...

Dalam tabel saya seharusnya memiliki tanggal check in dan check out di kolom kiri dan kanan, tetapi saya tidak mendapatkan informasi ini dari variabel pemesanan...

Ps: idenya adalah item.room_no merujuk ke daftar di kamus konteks. Saya telah mencoba hal-hal lain, tetapi ini yang paling dekat dengan saya.

Berikut adalah model:

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)

Dan

class Booking(models.Model):
#defaultRom = Room.objects.get(room_no='100')
#defaultRomID = defaultRom.id
room_choices = [('S', 'Single Occupancy'), ('D', 'Double Occupancy'), ('F', 'Firemannsrom')]
bookingid = models.AutoField(db_column='BookingID', primary_key=True)  # Field name made lowercase.
guest = models.ForeignKey('auth.User', on_delete=models.CASCADE)  # eller settings.AUTH_USER_MODEL
cin_date = models.DateField(db_column='CIN_Date', blank=True, null=True,
                                verbose_name='Check-In Date')  # Field name made lowercase.
cout_date = models.DateField(db_column='COUT_Date', blank=True, null=True,
                                 verbose_name='Check-Out Date')  # Field name made lowercase.
room_type = models.CharField(choices=room_choices, max_length=1, default=None)
room = models.ForeignKey('Room', on_delete=models.CASCADE, db_column='Room', default=None)

class Meta:
    managed = True
    db_table = 'Booking'

def __str__(self):
    return "Bruker: " + self.guest.__str__() + " -- id:" + str(self.bookingid) + " -- Inndato: " +  self.cin_date.__str__() + " -- Utdato: " + self.cout_date.__str__() + " -- " + self.room.__str__()

Berikut adalah hasil dari print(context):

{'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>]>}

Terima kasih sebelumnya!

0
August Asheim Birkeland 13 Maret 2020, 22:48

1 menjawab

Jawaban Terbaik

Anda merujuk ke CharField yang ditentukan di kelas Kamar alih-alih set kueri Pemesanan

Solusi cepat mungkin mengubah kode dengan cara berikut:

{% 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):
    available_rooms = Room.objects.filter(available=True)
    context = {}
    for room in available_rooms:
        related_bookings = Booking.objects.filter(room=room)
        if related_bookings:
            room_nums.append(room.room_no)
            room.related_bookings = related_bookings

    context["room_nums"] = room_nums
    context["available_rooms"] = available_rooms
    print(context)
    return render(response, "../templates/se_vaskbare_rom.html", context)

Tetapi saya percaya bahwa solusi termudah adalah yang berikut:

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)
{% 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 %}
1
August Asheim Birkeland 15 Maret 2020, 08:46