Модель для просмотра в виде словаря, а затем визуализации в виде таблицы html - PullRequest
1 голос
/ 09 января 2020

Я учусь Django и застряну с этой проблемой. Мне нужно перечислить «пользователей» с их соответствующими данными в список html. Я пытался, но нет сгенерированного списка. Мой БД уже заполнен 100 строками.

Это мой models.py

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


class General(models.Model):
    id = models.CharField(max_length=128, primary_key=True)
    name= models.CharField(max_length=128)
    lastname= models.CharField(max_length=128)
    state= models.CharField(max_length=128)
    asd= models.CharField(max_length=128)
    spc= models.CharField(max_length=128)
    dot = models.CharField(max_length=128, blank=True)

    def __str__(self):
        return self.name

Это мой views.py, уже пробовал return render_to_response и пытался использовать General.objects.all()/General.objects.get() но там написано

У генерала нет объектов

, поэтому я не могу сделать словарь вручную

from django.shortcuts import render
from Myapp.models import General
from django.forms.models import model_to_dict
# Create your views here.


def VisualizadorGeneral(request):
    listaGeneralDic = model_to_dict(General)
    return render(request, "VisualizadorGeneral.html", context=listaGeneralDic)

И это мое HTML:

<div class="container">
            {% if listaGeneralDic %}
            <table class="table table-bordered table-hover">
                <thead>
                    <tr>
                        <th>id</th>
                        <th>name</th>
                        <th>lastname</th>
                        <th>state</th>
                        <th>asd</th>
                        <th>spc</th>
                        <th>dot</th>
                    </tr>
                </thead>
                <tbody>
                    {% for dato in listaGeneralDic %}
                    <tr>                        
                        <td scope="row">{{ dato.id }}</td>
                        <td>{{ dato.name }}</td>
                        <td>{{ dato.lastname }}</td>
                        <td>{{ dato.state }}</td>
                        <td>{{ dato.asd }}</td>
                        <td>{{ dato.spc }}</td>
                        <td>{{ dato.dot }}</td>                        
                    </tr>
                    {% endfor %}
                 </tbody>
                 {% else %}
                 <p>Nothing to see</p>    
                 {% endif %}
            </table>
        </div>

Кто-то может заметить, что я делаю не так? Я был 3 дня, чтобы скрыть целое число rnet, чтобы найти ответы.

Ответы [ 2 ]

0 голосов
/ 09 января 2020

Вы также можете использовать Django на основе классов Список

, чтобы все объекты общих данных были добавлены в шаблон в качестве объекта контекста. Он также позаботится о рендеринге и получении / публикации для вас

from django.views.generic import ListView

class VisualizadorGeneral(ListView)
   template_name = '<your_template_name>'
   model = General
   context_object_name = 'dto' 
   # this is the name you will refer to the object in the template

, к которым вы можете обратиться в своем шаблоне, например:

 {% for item in dto %}
    <td>{{ item.<whatever> }}</td>
 {% endfor %}
0 голосов
/ 09 января 2020

Класс - это «план», который можно использовать для «создания экземпляров» различных «объектов». Он только определяет различные свойства и методы. Но в шаблоне нам нужно показать список реальных объектов.

def VisualizadorGeneral(request):
    objects_list = General.objects.all() # here we are retrieving real instances
    list_of_object_dicts = [model_to_dict(obj) for obj in objects_list] # and in this row we are applying function model_to_dict for each object
    context_data = {"listaGeneralDic: list_of_object_dicts} # context should be a dict with keys and values, after announcing "listaGeneralDic" in context we will be able to call it in template
    return render(request, "VisualizadorGeneral.html", context=context_data)
...