以下是模型:
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:
能够这样做(是否有更好的方法而不是创建seat_id_list):
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)发布于 2021-11-05 16:22:12
您可以通过以下方式获得这些Seat:
Seat.objects.filter(hall=hid).exclude(booking__show=spk)这将检索给定Hall对象hid的所有Booking,其中由spk对象确定的Show没有Booking。
https://stackoverflow.com/questions/69856255
复制相似问题