【问题标题】:Django models for school timetable?学校时间表的 Django 模型?
【发布时间】:2019-03-18 23:05:03
【问题描述】:

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

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 延伸,以允许学生注册以分期使用房间。我想将时间表模型链接到房间模型,以提供上下文以呈现类似于学校时期的房间和时期模型的不同周时间表。有什么建议吗?

【问题讨论】:

  • 您面临什么问题或问题?只是要求我们审查您的模型并提供建议并不是 SO 的目的,并且会使您的问题过于模糊。请查看How to Ask 上的指南。
  • 我想将时间表模型链接到房间模型,以提供上下文以呈现房间的不同周时间表。

标签: django database django-models database-design django-orm


【解决方案1】:

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

看看你的模型,你似乎为你想要做的事情的不同方面创建了模型,但模型之间似乎没有连贯性。

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

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 个时段)

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

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

【讨论】:

    猜你喜欢
    • 2018-07-03
    • 2012-08-03
    • 1970-01-01
    • 2017-07-16
    • 2013-08-25
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多