Python 我需要关于如何在Django中实现复选框的建议

Python 我需要关于如何在Django中实现复选框的建议,python,django,django-forms,django-templates,Python,Django,Django Forms,Django Templates,我正在尝试创建一种学生可以注册教师课程的方式。我在StudentData模型中添加了一个布尔字段,然后在课程模型中添加了一个多对多字段。我的每一个课程页面都是一个生成的slug页面,所有学生都列在那里。我希望在每个学生附近都会显示一个复选框。如果老师选择更多的学生并按下注册按钮,只有这些学生才能查看课程 现在,模板条件我可以自己做,但我坚持使用复选框以正确的方式更新数据。这是样板: <ul> {% for student in students %} <

我正在尝试创建一种学生可以注册教师课程的方式。我在StudentData模型中添加了一个布尔字段,然后在课程模型中添加了一个多对多字段。我的每一个课程页面都是一个生成的slug页面,所有学生都列在那里。我希望在每个学生附近都会显示一个复选框。如果老师选择更多的学生并按下注册按钮,只有这些学生才能查看课程

现在,模板条件我可以自己做,但我坚持使用复选框以正确的方式更新数据。这是样板:

<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">&laquo; 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 &raquo;</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实例,并选中initially
registered
字段

现在,在模板中,您必须呈现此表单的全部内容是(您必须在上下文中传递模板呈现中的表单
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