如何过滤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)发布于 2021-01-09 09:51:45
您可以使用带有api的js来实现这一点。例如api、graphene_django或django-rest-framework。并在模板上使用VueJS。当用户选择一个老师时,你会向你的api发送get请求。您的api的响应数据将成为其他复选框的项。例如,代码:
在template.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')
});
},https://stackoverflow.com/questions/65641033
复制相似问题