Как импортировать значения из базы данных в OptionMenu Django Python
У меня здесь есть страница моделей.
from django.db import models
class Trainee(models.Model):
TraineeID = models.AutoField(primary_key=True)
Name = models.CharField(max_length=50)
Course = models.CharField(max_length=20)
BatchNo = models.CharField(max_length=15)
DateofBirth = models.CharField(max_length=30)
ContactNo = models.CharField(max_length=20)
ContactAddress = models.CharField(max_length=80)
EmailAddress = models.EmailField()
class Meta():
db_table = "Trainee"
class Course(models.Model):
CourseID = models.AutoField(primary_key=True)
CourseName = models.CharField(max_length=20)
CourseDuration = models.CharField(max_length=30)
CourseCost = models.CharField(max_length=50)
class Meta():
db_table = "Courses"
Я сделал html страницу, где я могу вводить данные и сохранять Trainee
. Я хочу сделать так, чтобы Course
было OptionMenu, а не charfield, которое будет иметь опции <select>
только из данных, сохраненных в таблице Courses
. Таким образом, если в таблице Courses
есть сохраненные данные типа-Java, Python, C и т.д., то меню опций Course
будет содержать только их. А если они будут удалены или добавлены новые, то меню опций изменится соответствующим образом. Это моя html страница, где я могу вводить данные и сохранять их:
{% extends "MyTestApp/base.html" %}
{% block body_block %}
{% load static %}
<link rel="stylesheet" href="{% static '/css/bootstrap.min.css'%}" />
<form method="post" action="/trainee/">
{%csrf_token%}
<div class="container">
<br/>
<div class="form-group row">
<label class="col-sm-1 col-form-label"></label>
<div class="col-sm-4">
<h3> Enter Trainee Information </h3>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> Name: </label>
<div class="col-sm-4">
{{form.Name}}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label" for="Course"> Course: </label>
<div class="col-sm-4">
<select name="Course" id="Course">
<option value="{{courses.CourseName}}">{{courses.CourseName}}</option>
</select>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> BatchNo: </label>
<div class="col-sm-4">
{{form.BatchNo}}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label" for="DateofBirth"> Date Of Birth: </label>
<div class="col-sm-4">
<input type="date" name="DateofBirth" id="DateofBirth">
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> ContactNo: </label>
<div class="col-sm-4">
{{form.ContactNo}}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> ContactAddress: </label>
<div class="col-sm-4">
{{form.ContactAddress}}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"> EmailAddress: </label>
<div class="col-sm-4">
{{form.EmailAddress}}
</div>
</div>
<div class="form-group row">
<label class="col-sm-2 col-form-label"></label>
<div class="col-sm-4">
<button type="submit" class="btn btn-primary"> Submit </button>
</div>
</div>
</div>
</form>
{% endblock %}
Надеюсь, я понятно объяснил. Любая помощь будет оценена по достоинству. Я застрял на этом в течение последнего месяца.
Если я правильно понимаю суть вопроса, вы ищете:
class Trainee(models.Model):
...
course = models.ForeignKey('Course', on_delete=models.SET_NULL)
...
Подробнее об этом читайте здесь: Django's ForeignKey. Кстати, если вы хотите следовать рекомендуемым правилам PEP8, а поверьте мне, вы хотите этого, поля и переменные модели должны быть в змеином регистре (нижний регистр).
Вашему представлению формы в views.py может понадобиться courses = Course.objects.all()
в его контексте, зависит от того, что у вас там есть. Затем шаблон html-формы:
...
<select name="course" id="id_course">
{% for course in courses %}
<option value="{{ course.id }}">{{ course.course_name }}</option>
{% endfor %}
</select>
...
Обычно лучше передавать значение object.id
вместо object.name
. Имена должны быть для людей, идентификаторы - для наших алгоритмов.