Django从表单中的另一个模型查询模型

时间:2018-02-23 12:35:24

标签: python django

我正在尝试为我的表单构建查询。事实是,我希望我的查询指向显示教师所有的课程。在创建教师帐户时,我使用2个模型,一个用于验证teacher_ID字段。因此,要显示特定登录教师的课程,我必须使用相同的teacher_ID列从所有具有TeacherData模型教师的教程指向教师模型,然后找到基于此的方式显示课程。 我接近答案,我的查询并没有按预期工作。下拉菜单中没有显示课程..



class LectureForm(forms.ModelForm):
    lecture_title = forms.CharField(max_length=100, required=True)
    course = forms.ModelChoiceField(initial=Course.objects.first(), queryset=Course.objects.filter(
        Q(teacher1_id__in=[t.pk for t in
                           TeacherData.objects.filter(teacher_ID=[t.teacher_ID for t in Teacher.objects.all()])]) |
        Q(teacher2_id__in=[t.pk for t in
                           TeacherData.objects.filter(teacher_ID=[t.teacher_ID for t in Teacher.objects.all()])])))

    class Meta:
        model = Lecture
        fields = ('course', 'lecture_category', 'lecture_title', 'content')

class Teacher(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    name = models.CharField(max_length=30, null=True, blank=True, default=None)
    surname = models.CharField(max_length=50, null=True, blank=True, default=None)
    email = models.EmailField(unique=True, null=True, blank=True, default=None)
    teacher_ID = models.CharField(unique=True, max_length=14,
                                  validators=[RegexValidator(regex='^.{14}$',
                                                             message='The ID needs to be 14 characters long.')],
                                  null=True, blank=True, default=None)
                                  

class Lecture(models.Model):
    LECTURE_CHOICES = (
        ('Courses', 'Courses'),
        ('Seminars', 'Seminars'),
    )
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures',)
    lecture_category = models.CharField(max_length=10, choices=LECTURE_CHOICES, default='Courses',)
    lecture_title = models.CharField(max_length=100, blank=True, null=True)
    content = models.TextField(blank=False, default=None)


class Course(models.Model):
    study_programme = models.ForeignKey('StudyProgramme', on_delete=models.CASCADE, default='')
    name = models.CharField(max_length=50, unique=True)
    ects = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
    description = models.TextField()
    year = models.PositiveSmallIntegerField(validators=[MaxValueValidator(99)])
    semester = models.IntegerField(choices=((1, "1"),
                                            (2, "2"),
                                            ), default=None)
    teacher1 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None,
                                 verbose_name="Course Teacher", related_name='%(class)s_course_teacher')
    teacher2 = models.ForeignKey('TeacherData', on_delete=models.CASCADE, default=None, null=True,
                                 verbose_name="Seminar Teacher", related_name='%(class)s_seminar_teacher')

class TeacherData(models.Model):
    name = models.CharField(max_length=30)
    surname = models.CharField(max_length=50)
    teacher_ID = models.CharField(unique=True, max_length=14)
    notes = models.CharField(max_length=255, default=None, blank=True)




0 个答案:

没有答案