Показывать имена групп в выпадающем списке

#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 не отображал пустой текст