如何过滤 TopForm 中的字段,以便在用户选择教师时,所有其他字段自动向教师显示相关值。假设 Adam 是老师,并且在第四学期在网络部门教授网络编程(添加到管理员中)。现在用户选择Adam,当Adam选择时,部门下拉列表只显示与Adam等相关的Network。
forms.py
class AnswerForm(ModelForm):
class Meta:
model = Student_Answer
fields = ('answer',)
labels = {'answer': ''}
widgets = { 'answer': RadioSelect(choices=RATING_CHOICES)}
class TopForm(forms.Form):
teacher = forms.ModelChoiceField(queryset=Teacher.objects.all())
department = forms.ModelChoiceField(queryset=Department.objects.all())
subject = forms.ModelChoiceField(queryset=Subject.objects.all())
semester = forms.ModelChoiceField(queryset=Semester.objects.all())
models.py
class Question(models.Model):
question = models.CharField(max_length=200)
class Department(models.Model):
name = models.CharField(max_length=60)
class Semester(models.Model):
num = models.IntegerField(choices=SEMESTER, default=1)
class Subject(models.Model):
name = models.CharField(max_length=100)
code = models.CharField(max_length=5, null=True)
semester = models.ForeignKey(Semester, on_delete=models.CASCADE, null=True)
department = models.ManyToManyField(Department)
class Teacher(models.Model):
name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200, null=True)
department = models.ManyToManyField(Department)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
class Student_Answer(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
question = models.ForeignKey(Question, on_delete=models.CASCADE)
subject = models.ForeignKey(Subject, on_delete=models.CASCADE)
department = models.ForeignKey(Department, on_delete=models.CASCADE)
semester = models.ForeignKey(Semester, on_delete=models.CASCADE)
answer = models.SmallIntegerField(choices=RATING_CHOICES, default=None)
答案 0 :(得分:0)
您可以使用带有 api 的 js 来执行此操作。 api、graphene_django
或 django-rest-framework
的示例。并在您的模板上使用 VueJS。当用户选择一位老师时,您会向您的 api 发送获取请求。您的 api 响应数据成为其他选择框的项目。例如代码:
在模板.html
<div class="form-row">
<div class="col-md-12" style="padding-left:3px;">
<label for="id_faculty">Teachers</label>
<v-select :options="your_teachers" @input="selectTeacher($event)" label="name" v-model="selected_teacher"></v-select>
</div>
</div>
<!-- Your deparments div begin --!>
<div class="form-row">
<div class="col-md-12" style="padding-left:3px;">
<label for="id_faculty">Deparments</label>
<v-select :options="departments" label="name" v-model="sselected_teacher_departments"></v-select>
</div>
</div>
选择一名教师时,您的元素运行此功能:
getDepartment(){
axios.get(url+'/api/?query={allDepartment{id, name}}').then((response) =>{
this.department = response.data.data.allDepartment;
this.loading = false;
}).catch((error) => {
console.log(error, 'for : getDepartment() function')
});
},