以下是模型:
class Teacher(models.Model):
login = models.CharField(max_length=10, primary_key=True)
fname = models.CharField(max_length=30)
mname = models.CharField(max_length=30)
lname = models.CharField(max_length=30)
class Course(models.Model):
semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
title = models.CharField(max_length=40)
teachers = models.ManyToManyField(Teacher.login, through='TeacherCourse')
credits = models.IntegerField()
numberEnrolled = models.IntegerField()
nomenclature = models.CharField(max_length=128)
lectures = models.IntegerField()
class TeacherCourse(models.Model):
teacher = models.ForeignKey(Teacher.login, on_delete=models.CASCADE)
course = models.ForeignKey(Course, on_delete=models.CASCADE)
allotedLectures = models.IntegerField()
刚刚将这些添加到新项目并尝试运行服务器。我得到以下内容:
AttributeError:type对象'Teacher'没有属性'login'
我错过了一些明显的东西?
答案 0 :(得分:1)
我后来在Uday Bhatye的回答中发现了你的错误:
teacher = models.ForeignKey(Teacher.login, on_delete=models.CASCADE)
是django中的语法错误。
你应该这样做:
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
并引用分配给特定TeacherCourse
的教师的登录状态:
teachercourse = TeacherCourse.objects.filter(id=teachercourse_id).select_related('teacher')
login_status = course.teacher.login
使用select_related
点击数据库一次,并获取分配给TeacherCourse
的所有教师的登录状态。
答案 1 :(得分:0)
由于教师模型中的登录字段已被声明为主键,因此我无需在其他两个模型中将其引用为Teacher.login。仅作为教师参考就足够了。