首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django ORM操作django ORM查询的更好方法

Django ORM操作django ORM查询的更好方法
EN

Stack Overflow用户
提问于 2021-11-05 16:18:54
回答 1查看 208关注 0票数 1

以下是模型:

代码语言:javascript
复制
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查询如下所示:

代码语言:javascript
复制
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):

代码语言:javascript
复制
            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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-05 16:22:12

您可以通过以下方式获得这些Seat

代码语言:javascript
复制
Seat.objects.filter(hall=hid).exclude(booking__show=spk)

这将检索给定Hall对象hid的所有Booking,其中由spk对象确定的Show没有Booking

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69856255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档