Django 属性错误 - 'ForwardManyToOneDescriptor' 对象没有属性 'courses'

问题描述

我创建了不同的模型,在 Division 模型中,我参考了许多模型,它们的主键在 Division 模型中被引用为外键。我已将课程声明为批处理模型中的模型属性。 这是我的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,null=True)
    lab_time = models.ForeignKey(LabTime,null=True)
    room = models.ForeignKey(Labroom,null=True)
    instructor = models.ForeignKey(Instructor,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()

我的 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 下,我已经创建了函数初始化。

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,len(crs_inst))])
                        self._classes.append(newClass)

        return self


我正在使用遗传算法来安排课程和实验室。 任何人都可以解决我的错误,这会有所帮助,谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)