Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何同时从三个不同的表中获取信息?_Django_Django Models_Django Views - Fatal编程技术网

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