#python #django
#python #django
Вопрос:
Я работаю над сайтом studentresult на Python и Django. Теперь я хочу попросить базу данных предоставить мне имена групп, которые есть в базе данных. Используя стандартную базу данных db.sqlite3 из django. В выпадающем меню я получаю три белые полосы, потому что теперь у меня есть три группы. Когда я отображаю класс в id = Models.Целочисленное поле (id, flat=True) измените return.self.group_name на возврат self.id затем выпадающий список показывает мне идентификатор, который есть у группы. Но как я могу показать имя группы. Много пробовал:
- Изменено на group в модели
- Изменено на groupname в модели
- Изменены несколько команд в views.py
- Создал новый элемент базы данных Groepen и изменил запрос на него.
views.py
from django.shortcuts import render, redirect
from .models import DisplayGroups, DisplayUsername
from django.contrib.auth.models import User, Group
def index(request):
response = redirect('/login')
return response
def home(response):
return render(response, "home/home.html")
def bekijk(request):
DisplayGroup = Group.objects.all()
print(DisplayGroup)
DisplayNames = User.objects.all()
print(DisplayNames)
return render(request, "home/bekijk.html", {"DisplayGroups": DisplayGroup,"DisplayUsername":DisplayNames})
models.py
from django.db import models
# Create your models here.
class DisplayGroups(models.Model):
group_name = models.CharField(max_length=200)
def __str__(self):
return self.group_name
class DisplayUsername(models.Model):
username = models.CharField(max_length=100)
def __str__(self):
return self.username
HTML-страница
{% extends 'home/base.html' %}
{% block title %}Cijfers studenten{% endblock %}
{% block javascript %}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(document).ready(function()
{
var $productvar=$("#groupdd1");
$itemvar=$("#userdd1");
$options=$itemvar.find('option');
$productvar.on('change', function()
{
$itemvar.html($options.filter('[value="' this.value '"]'))
}).trigger('change');
});
</script>
{% endblock %}
{% block content %}
<h1>Studentresultaten</h1>
<select id="groupdd1">
<option disabled="true" selected>-- Select Fruit --</option>
{% for result in DisplayGroups %}
<option>{{result.group_name}}</option>
{% endfor %}
</select>
<select id="userdd1">
<option disabled="true" selected>-- Select Fruit --</option>
{% for result in DisplayUsername %}
<option>{{result.username}}</option>
{% endfor %}
</select>
{% endblock %}
Часть jquery останется на потом, потому что я хочу создать зависимое выпадающее меню. Надеюсь, вы, ребята, сможете мне помочь. Заранее спасибо!
Комментарии:
1. Вы делаете запрос
DisplayGroup = Group.objects.all()
, но ваша модельDisplayGroups
.2. @WillemVanOnsem когда я меняю запрос на
DisplayGroups = Group.objects.all()
then, в выпадающем списке по-прежнему отображаются три записи, но все пустые. Строки не отображаются.3. конечно, поскольку a
Group
не имеетgroup_name
поля, поэтому{{ result.group_name }}
не имеет смысла.4. Но у него есть имя, в данном случае test . Возможно ли показать это имя внутри выпадающего меню или это невозможно сделать?
5. просто используйте
{{ result }}
. Затем он вызоветstr(..)
, в группе, или вы можете использовать{{ result.name }}
.
Ответ №1:
@WilliamVanOnsem прав, модель, из которой вы фильтруете, — это группа, у которой нет group_name в качестве поля. Вот что вы можете сделать. В views.py
DisplayGroup = DisplayGroups.objects.all()
DisplayNames = DisplayName.objects.all()
Теперь в HTML-шаблоне вы можете получить доступ к group_name и result.username. В пользовательской модели есть поле имени пользователя, поэтому result.username не отображал пустой текст