Заполнение раскрывающегося списка из базы данных в Django - PullRequest
0 голосов
/ 13 января 2019

Привет, поэтому в основном я пытаюсь заполнить выпадающее меню из базы данных, которая у меня есть на данный момент. Это позволит «Учителю» выбрать «Ученика», для которого они вводят оценки. Я изо всех сил пытаюсь понять любые учебники онлайн, потому что большинство из них для 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'),
]

Просмотров: 1011 * *

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 голосов
/ 15 января 2019

Используйте форму 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.

...