Django 如何同时从三个不同的表中获取信息?
我有以下型号:Django 如何同时从三个不同的表中获取信息?,django,django-models,django-views,Django,Django Models,Django Views,我有以下型号: class Device(models.Model): name = models.CharField(max_length=100, blank=False) description = models.TextField(max_length=500, blank=True) ip_address = models.GenericIPAddressField(blank=True, null=True) contact_person = mode
class Device(models.Model):
name = models.CharField(max_length=100, blank=False)
description = models.TextField(max_length=500, blank=True)
ip_address = models.GenericIPAddressField(blank=True, null=True)
contact_person = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
team = models.ForeignKey(Team, on_delete=models.SET_NULL, null=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
def __str__(self):
return self.name
class TimeSlot(models.Model):
name = models.CharField(max_length=20)
start_slot = models.CharField(max_length=10)
end_slot = models.CharField(max_length=10)
def __str__(self):
return self.name
class Reservation(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
time_slot = models.ForeignKey(TimeSlot, on_delete=models.CASCADE)
date_of_reservation = models.DateField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return "{} - {} for device: {} by {}.".format(self.time_slot, self.date_of_reservation, self.device, self.user)
class ForbiddenSlot(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
time_slot = models.ForeignKey(TimeSlot, on_delete=models.CASCADE)
def __str__(self):
return str(self.time_slot)
这是一个简单的预订系统。我无法理解如何为三个不同的表创建查询。
我想获得所有未设置在禁止时段的时隙,并为给定的设备名称保留。我不完全确定这是否可行,但我认为它会,而且绝对值得一试
TimeSlot.objects.filter(
禁止槽为空=真,
预订\uuuu设备\uuuu name='device name',
)
对我来说,这不一定是最简单的事情,但是
时隙
不仅可以访问。禁止时隙设置
,它还可以通过禁止时隙
进行过滤。这同样适用于预订
我想更改模型的结构会更好,比如删除模型禁止时段
并在预订模型上替换为标志,然后您可以从预订模型中选择禁止标志为False的所有时隙,如:
reservations=Reservation.objects.only('time\u slot').filter(device\u name=name\u of\u the\u device,probled=False)
其中probled
是一个布尔字段。使用select\u related()将预填充适当的属性:
Model.objects.select_related()