在Django中从数据库填充一个下拉列表

时间:2019-01-13 17:26:04

标签: django django-models django-forms django-templates django-views

嗨,基本上,我试图从我当前拥有的数据库中填充一个下拉菜单。这将使“教师”能够选择他们为其输入分数的“学生”。由于大多数教程都是针对django 1.9而我正在使用2.1,因此我难以在线理解任何教程。

请提供帮助,将不胜感激。

模板:

<form action="{% url 'subject1_view' %}" method="post">

    {% csrf_token %}

    <div class="form-group row">
        <label class="col-2 col-form-label" for="information">Student Name</label>
        <div class="col-10">
            <form method="POST">
                <select class="form-control"  name="student_name" id="information">
                    {% for ?? %}
                        <option value="{{ ?? }}">{{ ?? }}</option>
                    {% endfor %}
                </select>
            </form>
        </div>
    </div>

URL:

from django.urls import path, include
from . import views

urlpatterns = [
    path('teacher_login', views.teacher_login, name='teacher_login'),
    path('t_dashboard', views.t_dashboard, name='t_dashboard'),
    path('subject1_view', views.subject1_view, name='subject1_view'),
    path('loguserout', views.loguserout, name='loguserout'),
]

观看次数:

def subject1_view(request):
    if request.method == 'POST':
        student_name = (request.POST.get('student_name'))
        current_grade = (request.POST.get('current_grade'))
        previous_grade = (request.POST.get('previous_grade'))
        target_grade = (request.POST.get('target_grade'))
        incomplete_homework = (request.POST.get('incomplete_homework'))
        behaviour_rank = (request.POST.get('behaviour_rank'))

        i = Subject1(student_name=student_name, current_grade=current_grade, previous_grade=previous_grade,
                     target_grade=target_grade, incomplete_homework=incomplete_homework, behaviour_rank=behaviour_rank)
        i.save()

        return render(request, 'Teacher/dashboard.html')
    else:
        return render(request, 'Teacher/subject1.html')

型号:

from django.db import models
from Student.models import Student
# Create your models here.

class Subject1(models.Model):
    student_name = models.ForeignKey(Student, on_delete=models.CASCADE)
    current_grade = models.CharField(max_length=2)
    previous_grade = models.CharField(max_length=2)
    target_grade = models.CharField(max_length=2)
    incomplete_homework = models.CharField(max_length=2)
    behaviour_rank = models.CharField(max_length=2)

    def __str__(self):
        return self.student_name

1 个答案:

答案 0 :(得分:0)

使用Django表单:

class SelectForm(forms.Form):
    student = forms.ChoiceField(widget=forms.Select(attrs={'class': 'form-control'}))

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['student'].choices= [(student.id, student.name) for student in Student.objects.all()]

模板:

<form action="{% url 'subject1_view' %}" method="post">

{% csrf_token %}

<div class="form-group row">
    <label class="col-2 col-form-label" for="information">Student Name</label>
    <div class="col-10">
    {{ form }}
    </div>
</div>
</form>

还可以从View向上下文添加添加表单。