我创建了不同的模型,在部门模型中我引用了许多模型,它们的主键在部门模型中作为外键引用。我已在批处理模型中将课程声明为模型属性。 这是我的models.py文件
class lab_load(models.Model):
lab_code = models.CharField(max_length=10,null=True)
subject_name = models.CharField(max_length=100,null=True)
subject_abv = models.CharField(max_length=10,null=True)
lab_load = models.IntegerField(null=True)
semester = models.IntegerField(null=True)
max_numb_students = models.CharField(max_length=65,null=True)
instructors = models.ManyToManyField(Instructor)
def __str__(self):
return f'{self.lab_code} {self.subject_name} {self.subject_abv}'
class Batch(models.Model):
bat_name = models.CharField(max_length=50)
courses = models.ManyToManyField(lab_load)
@property
def get_courses(self):
return self.courses
def __str__(self):
return self.bat_name
class Division(models.Model):
division_id = models.CharField(max_length=25, primary_key=True)
batch = models.ForeignKey(Batch, on_delete=models.CASCADE,blank=True, null=True)
num_lab_in_week = models.IntegerField(default=0)
course = models.ForeignKey(lab_load, on_delete=models.CASCADE, blank=True, null=True)
lab_time = models.ForeignKey(LabTime, on_delete=models.CASCADE, blank=True, null=True)
room = models.ForeignKey(LabRoom,on_delete=models.CASCADE, blank=True, null=True)
instructor = models.ForeignKey(Instructor, on_delete=models.CASCADE, blank=True, null=True)
def set_labroom(self, labroom):
division = Division.objects.get(pk = self.division_id)
division.room = labroom
division.save()
def set_labTime(self, labTime):
division = Division.objects.get(pk = self.division_id)
division.lab_time = labTime
division.save()
def set_instructor(self, instructor):
division = Division.objects.get(pk=self.division_id)
division.instructor = instructor
division.save()
My views.py文件
class Data:
def __init__(self):
self._rooms = Room.objects.all()
self._meetingTimes = MeetingTime.objects.all()
self._instructors = Instructor.objects.all()
self._courses = Course.objects.all()
self._depts = Department.objects.all()
self._labrooms = LabRoom.objects.all()
self._labTimes = LabTime.objects.all()
self._labcourses = lab_load.objects.all()
self._bats = Batch.objects.all()
def get_rooms(self): return self._rooms
def get_labs(self): return self._labs
def get_labrooms(self): return self._labrooms
def get_instructors(self): return self._instructors
def get_courses(self): return self._courses
def get_depts(self): return self._depts
def get_labcourses(self): return self._labcourses
def get_bats(self): return self._bats
def get_meetingTimes(self): return self._meetingTimes
def get_labTimes(self): return self._labTimes
在不同的类下:创建了类LabSchedule,在该类下我创建了函数initialize
def initialize(self):
divisions = Division.objects.all()
for division in divisions:
bat = Division.batch
n = division.num_lab_in_week
if n <= len(LabTime.objects.all()):
labcourses = bat.courses.all() <------ Error in this line ------->
for labcourse in labcourses:
for i in range(n // len(labcourses)):
crs_inst = labcourse.instructors.all()
newClass = Classlab(self._classNumb, bat, division.division_id, labcourse)
self._classNumb += 1
newClass.set_labTime(data.get_labTimes()[rnd.randrange(0, len(LabTime.objects.all()))])
newClass.set_labroom(data.get_labrooms()[rnd.randrange(0, len(data.get_labrooms()))])
newClass.set_instructor(crs_inst[rnd.randrange(0, len(crs_inst))])
self._classes.append(newClass)
else:
n = len(LabTime.objects.all())
labcourses = bat.courses.all()
for labcourse in labcourses:
for i in range(n // len(labcourses)):
crs_inst = labcourse.instructors.all()
newClass = Classlab(self._classNumb, bat, division.division_id, labcourse)
self._classNumb += 1
newClass.set_labTime(data.get_labTimes()[rnd.randrange(0, len(LabTime.objects.all()))])
newClass.set_labroom(data.get_labrooms()[rnd.randrange(0, len(data.get_labrooms()))])
newClass.set_instructor(crs_inst[rnd.randrange(0, len(crs_inst))])
self._classes.append(newClass)
return self
我用遗传算法来安排课程和实验室。 任何人都可以解决我的错误,这将是有益的,谢谢你
目前没有回答
相关问题 更多 >
编程相关推荐