django - 如何通过 ModelChoiceField 选择动态过滤视图
问题描述
我创建了一个呈现学生下拉列表的模板。
我想过滤另一个视图上的查询集,以仅显示所选学生的日程信息。
student_list 中的 perm_id 是主键, StudentSchedule 中的 perm 是外键。
这是我的 models.py、forms.py 和 views.py 的片段
模型.py
class StudentList(models.Model):
student_name = models.CharField(max_length=45, blank=True, null=True)
perm_id = models.IntegerField(primary_key=True)
class StudentSchedule(models.Model):
perm = models.ForeignKey(StudentList, on_delete=models.CASCADE)
begin_period = models.CharField(max_length=45, blank=True, null=True)
section_id = models.CharField(max_length=45, blank=True, null=True)
course_title = models.CharField(max_length=45, blank=True, null=True)
last_name1 = models.CharField(max_length=45, blank=True, null=True)
表格.py
class StudentForm(forms.Form):
Student = forms.ModelChoiceField(queryset=StudentList.objects.all()
.order_by('student_name'))
视图.py
class ScheduleView(View):
form_class = ScheduleForm
template_name = 'learning_logs/student_schedule.html'
def get(self, request):
form = self.form_class(initial={})
data = StudentSchedule.objects.filter()
return render(request, self.template_name, {'form': form, 'data':
data})
我可以执行以下操作并获得 id #123456 的学生
data = StudentSchedule.objects.filter(perm=123456)
但是,我希望 Django 使用从 StudentList 中选择的学生的 perm_id
我的网址如下:
# Page for selecting a student from drop down list
path('select_student/', views.StudentView.as_view(), name='select_student'),
# Page for displaying student schedule
path('student_schedule/<int:pk>/$', views.ScheduleView.as_view(),
name='student_schedule'),
解决方案
说你的路径就像
urlpatterns = [
path('students/<int:pk>/$', views.ScheduleView.as_view(), name='student-detail'),
...
]
然后你会在你的 get 方法中得到一个额外的参数,你可以访问它
class ScheduleView(View):
form_class = ScheduleForm
template_name = 'learning_logs/student_schedule.html'
def get(self, request, pk):
form = self.form_class(initial={})
data = StudentSchedule.objects.filter(perm=pk)
return render(request, self.template_name, {'form': form, 'data':
data})
编辑
而且在你的student_schedule.html
你需要 perm.id 来访问这个 url
{% url ... perm.id%}
推荐阅读
- fonts - Processing.js 字体未加载
- c# - 在c#中将文本文件名写为日期
- python - Python遍历列表列表
- typescript - 我可以强制 TypeScript 编译器使用名义类型吗?
- javascript - 使用猫鼬有条件地删除或添加文档数组中的元素
- angular - 如何知道Angular 6中字符串的像素长度?
- python - 需要获取相关数组索引的元音计数
- spring-boot - Spring Boot 单元测试端点 NullPointerException - 以及如何达到 100% 的覆盖率
- angular - Angular - 解包组件模板
- python - Python 文件继续运行先前的输出