Python 我需要关于如何在Django中实现复选框的建议
我正在尝试创建一种学生可以注册教师课程的方式。我在StudentData模型中添加了一个布尔字段,然后在课程模型中添加了一个多对多字段。我的每一个课程页面都是一个生成的slug页面,所有学生都列在那里。我希望在每个学生附近都会显示一个复选框。如果老师选择更多的学生并按下注册按钮,只有这些学生才能查看课程 现在,模板条件我可以自己做,但我坚持使用复选框以正确的方式更新数据。这是样板:Python 我需要关于如何在Django中实现复选框的建议,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我正在尝试创建一种学生可以注册教师课程的方式。我在StudentData模型中添加了一个布尔字段,然后在课程模型中添加了一个多对多字段。我的每一个课程页面都是一个生成的slug页面,所有学生都列在那里。我希望在每个学生附近都会显示一个复选框。如果老师选择更多的学生并按下注册按钮,只有这些学生才能查看课程 现在,模板条件我可以自己做,但我坚持使用复选框以正确的方式更新数据。这是样板: <ul> {% for student in students %} <
<ul>
{% for student in students %}
<br>
<br>
{{ student.name }} {{ student.surname }}<input type='checkbox' {% ifequal value 0 %}checked{% endifequal %}> 0
<br>
<br>
{% endfor %}
</ul>
<div class="row">
<div class="col-md-4">
<div class="pagination">
<span class="step-links">
{% if students.has_previous %}
<a href="?page=1">« first</a>
<a href="?page={{ students.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
{{ students.number }}
</span>
{% if students.has_next %}
<a href="?page={{ students.next_page_number }}">next</a>
<a href="?page={{ students.paginator.num_pages }}">last »</a>
{% endif %}
</span>
</div>
</div>
<div class="col-md-4">
<button class="btn-success">Enroll</button>
</div>
</div>
您不应该在
ModelForm
中明确指定该字段,因为它已在模型中定义
class StudentDataForm(forms.ModelForm):
class Meta:
model = StudentData
fields = ('enrolled', )
这就是表单定义。如果要传递初始值,请将其实例化为
form = StudentDataForm(initial={'enrolled': True})
它将神奇地(并非如此)创建ModelForm实例,并选中initiallyregistered
字段
现在,在模板中,您必须呈现此表单的全部内容是(您必须在上下文中传递模板呈现中的表单context={'form':form}
)
这将渲染表单,但如果您想手动渲染,请按如下方式执行
...
{{ form.enrolled }}
...
它将只呈现复选框。请记住,您必须将其嵌套在
标记中,并在此处添加一个提交
按钮
更多资源:
为什么要问两个类似的问题
就个人而言,最好将ManyToManyField
相关课程和学生纳入课程
模式。这很容易,因为在此之后,您所需要做的就是加载表单并发布它。然后:
class Course(models.Model):
# all your fields
students = models.ManyToManyField(StudentData)
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = "__all__"
默认情况下,表单中的ManyToManyField
由SelectMultiple
小部件表示。如果您喜欢复选框:
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = "__all__"
widgets = {
'students': forms.CheckboxSelectMultiple
}
在您的模板中,只需加载表单{{form}
,教师就会通过复选框选择课程中的学生。每个学生都将通过使用反向ManyToManyField
关系过滤来查看课程:
student = Student.objects.get(name='John', surname='Doe')
courses = student.course_set.all() # These are all the courses where the student is enrolled
这就是
ManyToManyField
的优点。您可以从课程表单
分配学生,并使用反向关系课程集
从学生模型访问他们。这是有用的信息,但并不能真正回答我的问题。我想这种方法也不错。但这是一个多选择框。我只想在每个学生名字旁边打个复选框。。我如何确认这一点?我需要一个按钮。解决了。谢谢
class Course(models.Model):
# all your fields
students = models.ManyToManyField(StudentData)
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = "__all__"
class CourseForm(forms.ModelForm):
class Meta:
model = Course
fields = "__all__"
widgets = {
'students': forms.CheckboxSelectMultiple
}
student = Student.objects.get(name='John', surname='Doe')
courses = student.course_set.all() # These are all the courses where the student is enrolled