以下是型號:
class Seat(models.Model):
hall = models.ForeignKey(Hall,on_delete=CASCADE)
type = models.TextField(verbose_name="Seat Type")
class Show(models.Model):
show_time = models.TimeField(verbose_name='Show Time')
movie = models.ForeignKey(Movie,on_delete=CASCADE)
hall = models.ForeignKey(Hall,on_delete=CASCADE)
cinema = models.ForeignKey(Cinema,on_delete=CASCADE)
class Booking(models.Model):
seat = models.ForeignKey(Seat,on_delete=CASCADE)
show = models.ForeignKey(Show,on_delete=CASCADE)
movie = models.ForeignKey(Movie,on_delete=CASCADE)
hall = models.ForeignKey(Hall,on_delete=CASCADE)
cinema = models.ForeignKey(Cinema,on_delete=CASCADE)
user = models.ForeignKey(User, verbose_name="Username", on_delete=DO_NOTHING) # donothing
型號說明:
一個大廳里的多個座位
每個大廳舉辦多場演出
每個預訂基本上是一張具有特定座位和特定表演的表演門票。
要求是獲取一個查詢集,該查詢集包含特定節目的預訂表中不存在的所有座位。基本上,通過檢查它們不在預訂表中來獲取演出的可用座位串列
SQL 查詢如下所示:
SELECT * FROM Seat as S join Show as Sh on S.hall = Sh.hall join Bookings as B on B.show = Sh.id where Sh.id = 1 AND B.seat IS NULL
如何將其轉換為 Django ORM:
能夠這樣做(有沒有更好的方法而不是創建座位 ID 串列?):
qs = Seat.objects.filter(hall=hid) #----------------------------------
show_bookings = Booking.objects.filter(show=spk)
seat_id_list = []
for each_booking in show_bookings:
print(each_booking.seat.id)
seat_id_list.append(each_booking.seat.id)
qss = Seat.objects.exclude(id__in = seat_id_list)
uj5u.com熱心網友回復:
您可以通過以下方式獲得這些Seats:
Seat.objects.filter(hall=hid).exclude(booking__show=spk)
這將檢索Seat給定Hall物件的所有s,hid其中沒有由物件確定的Bookinga 。Showspk
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349988.html
