Django属性错误“ForwardManyToneDescriptor”对象没有属性“courses”

2024-09-30 14:19:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了不同的模型,在部门模型中我引用了许多模型,它们的主键在部门模型中作为外键引用。我已在批处理模型中将课程声明为模型属性。 这是我的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


我用遗传算法来安排课程和实验室。 任何人都可以解决我的错误,这将是有益的,谢谢你


Tags: selftruegetlenreturnobjectsmodelsdef