Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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_Database_Django Models_Database Design_Django Orm - Fatal编程技术网

学校时间表的Django模型?

学校时间表的Django模型?,django,database,django-models,database-design,django-orm,Django,Database,Django Models,Database Design,Django Orm,我正在为每个房间创建一个学校时间表应用程序?这是我的模型。我有什么遗漏吗 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): re

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

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
班级建设(models.Model):
bid=models.CharField(最大长度=10,主键=True)
name=models.CharField(最大长度=255,唯一性=True)
类元:
排序=['bid']
定义(自我):
返回f'{self.bid}'
教室(模型.模型):
building=models.ForeignKey(building,on_delete=models.CASCADE,
相关_name='rooms')
编号=型号。正整数字段()
可用性=models.BooleanField(默认值=False)
power=models.BooleanField(默认值=False)
类元:
排序=[“建筑物”,“编号”]
共同唯一=[“建筑物”,“编号”]
定义(自我):
返回f'{self.building.bid}/{self.number}'
类引用(models.Model):
日期=型号。日期字段(“日期”)
开始时间=models.ForeignKey(时间,在删除时=models.CASCADE,相关的时间)
结束\u period=models.ForeignKey(period,on\u delete=models.CASCADE,related\u name='end\u at')
类元:
抽象=真
上课时间(models.Model):
start=models.TimeField()
end=models.TimeField()
对象=周期管理器()
类元:
排序=['start']
定义(自我):
返回f'{self.start}-{self.end}'
def检查时间(自身):
如果self.start

将有一个模型名称预订,从事件开始,允许学生注册使用房间。我想做一个时间表模型链接到一个房间模型,以提供上下文,为一个房间和类似于学校课时的课时模型呈现不同的星期时间表。有什么建议吗

我认为您可能需要重新思考您的实际模型和您试图实现的目标

看看你的模型,你似乎在为你要做的事情的不同方面创建模型,但模型之间似乎没有一致性

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

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节课)

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


我希望这能让你对如何解决这个问题有所了解,我在回答中没有创建模型,因为我认为你的问题实际上不是一个技术问题,而是一个正确方向上的问题。

你面临的问题是什么?仅仅要求我们审查您的模型并给出建议并不是SO的目的,这会使您的问题变得过于模糊。请查看上的指导原则。我想创建一个房间模型的时间表模型链接,以提供用于呈现房间不同周时间表的上下文。