首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何基于外键过滤表单?

如何基于外键过滤表单?
EN

Stack Overflow用户
提问于 2021-01-09 09:19:21
回答 1查看 99关注 0票数 0

如何过滤TopForm中的字段,以便当用户选择教师时,所有其他字段都会自动向教师显示相关值。假设Adam是老师,在网络系第四学期教授网络编程(添加在管理中)。现在用户选择Adam,当Adam选择时,部门下拉列表只显示与Adam相关的Network,等等。

forms.py

代码语言:javascript
复制
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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2021-01-09 09:51:45

您可以使用带有api的js来实现这一点。例如api、graphene_djangodjango-rest-framework。并在模板上使用VueJS。当用户选择一个老师时,你会向你的api发送get请求。您的api的响应数据将成为其他复选框的项。例如,代码:

在template.html中

代码语言:javascript
复制
                  <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>

当选择教师时,元素运行以下函数:

代码语言:javascript
复制
    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')
      });
    },
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65641033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档