首页 > 解决方案 > 学校时间表的 Django 模型?

问题描述

我正在为每个房间构建一个学校时间表应用程序?有我的模型。我有什么遗漏吗?

class Building(models.Model):
      bid = models.CharField(max_length=10, primary_key=True)
      name = models.CharField(max_length=255, unique=True)

class Meta:
    ordering = ['bid']

def __str__(self):
    return f'{self.bid}'


class Room(models.Model):
      building = models.ForeignKey(Building, on_delete=models.CASCADE, 
      related_name='rooms')
      number = models.PositiveIntegerField()
      availability = models.BooleanField(default=False)
      power = models.BooleanField(default=False)

class Meta:
    ordering = ['building', 'number']
    unique_together = ['building', 'number']

def __str__(self):
    return f'{self.building.bid}/{self.number}'

class Occurrence(models.Model):
    date = models.DateField('Date')
    start_period = models.ForeignKey(Period, on_delete=models.CASCADE, related_name='start_at')
    end_period = models.ForeignKey(Period, on_delete=models.CASCADE, related_name='end_at')

    class Meta:
        abstract = True

class Period(models.Model):
    start = models.TimeField()
    end = models.TimeField()
    objects = PeriodManager()
    class Meta:
        ordering = ['start']

    def __str__(self):
        return f'{self.start}-{self.end}'

    def check_time(self):
        return True if self.start < self.end else False

    def check_overlap(self):
        pass


   class TimetableModel(models.Model):
        class Meta:
            abstract =True

将有一个模型名称 Booking,它从 Occurrence 延伸,以允许学生注册以分期使用房间。我想将时间表模型链接到房间模型,以提供上下文以呈现类似于学校时期的房间和时期模型的不同周时间表。有什么建议吗?

标签: djangodatabasedjango-modelsdatabase-designdjango-orm

解决方案


我认为您可能需要重新考虑您的实际模型以及您想要实现的目标。

查看您的模型,您似乎为您尝试做的不同方面创建模型,但模型之间似乎没有连贯性。

例如,查看它的一种方法如下:

Building
- Name

Room
- Number 
- Building (FK)

Booking
- Room
- Period (you could just have statically defined list assume these are fixed)
- Duration (number of periods, this removes the need to specify end as you can calculate it.

要进行预订,您需要了解以下信息: - 您要预订的房间 - 您要使用的时间段 - 您想预订多长时间(即 2 个时间段)

从数据的角度来看,这可能是您可以构建的最简单的模型(简单总是更好)。在显示可用内容方面,您可以在预订时进行(预订表格)。

我希望这能让您了解如何解决这个问题,我没有在这个答案中创建模型,因为我认为您的问题并不是真正的技术问题,而是更多的正确方向。


推荐阅读