Как в django вывести таблицу
Перейти к содержимому

Как в django вывести таблицу

  • автор:

Как вывести данные из базы данных django?

5fb543f7beae5679402418.png

Я хочу вывести список предметов которые привязаны к групе к которой привязан профиль, но выводит что-то непонятное:
Что я не так делаю с выводом?

  • Вопрос задан более двух лет назад
  • 2452 просмотра

1 комментарий

Простой 1 комментарий

Достаем данные из БД

В этой статье мы предполагаем, что вы уже знаете о моделях данных и как описываются их поля. О моделях можно узнать в статье Модели и поля.

В этой статье мы работаем с моделью данных для блога. Если бы мы хранили данные в таблице Excel, она бы выглядела так:

А для Django ORM эта таблица описывается так:

from django.db import models class Post(models.Model): title = models.CharField(max_length=200) text = models.TextField() created_date = models.DateTimeField() published_date = models.DateTimeField() 

Эта модель называется Post и у неё есть 4 поля:

  • title — заголовок поста, строка до 200 сиволов
  • text — текст поста, строка произвольной длины
  • created_date — дата и время создания поста, объект datetime
  • published_date — дата и время публикации поста, объект datetime

Достать все

Чтобы достать все данные о постах, нам понадобится objects.all() :

posts = Post.objects.all() print(posts) 

Вы увидите что-то такое:

Это 3 поста из базы данных. Как вы могли заметить, они лежат не в списке, а в QuerySet . Пока не будем вдаваться в подробности что это такое, главное, что им можно пользоваться как списком.

— объект поста из базы данных. У него есть заголовок, текст, даты создания и публикации… Всё то, что мы указывали у модели.

Давайте получим первый пост:

print(posts[0]) # 

Довольно просто. Обратились по индексу, как будто это список — получили первый пост.

Достать данные из объекта

Как достать заголовок, текст и т. д. из ? Укажем поле, данные из которого хотим получить:

some_post = posts[0] print(some_post.title) 

Заголовок хранится в поле title , вот его мы и указали. Вот что выведется в консоль:

Испытания дрейфующего стратостата. Запуск Рогозина и LoRa в стратосферу 

А вот так можно вывести заголовки всех постов:

for post in posts: print(post.title) 

Вот что выведется:

Испытания дрейфующего стратостата. Запуск Рогозина и LoRa в стратосферу Telegram. Безлимитный сетевой диск. Бесплатный 13 самых заминусованных статей минувшего года Почему ['1', '7', '11'].map(parseInt) возвращает [1, NaN, 3] в Javascript? . 

Что читать дальше

Попробуйте бесплатные уроки по Python

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

Как вывести таблицу из базы данных на сайт

введите сюда описание изображения

Хочу вывести на сайт таблицу примерно вот так: Вот файл models.py:

from django.db import models from django.urls import reverse from datetime import date from django.contrib.auth.models import User import uuid class School_class(models.Model): school_class = models.CharField(max_length=10, help_text = 'Класс') def __str__(self): return self.school_class class People(models.Model): first_name = models.CharField(max_length=100, help_text = 'Имя учащегося') last_name = models.CharField(max_length=100, help_text = 'Фамилия учащегося') school_class = models.ForeignKey(School_class, help_text = 'Класс ученика', on_delete = models.SET_NULL, null=True) def __str__(self): return '<> <>'.format(self.first_name, self.last_name) class State(models.Model): date = models.DateField(help_text = 'Дата') status = models.CharField(max_length=10, choices = ( ('+', '+'), ('-', '-') )) people = models.ForeignKey(People, help_text = 'Фамилия, имя учащегося', on_delete = models.SET_NULL, null=True) def __str__(self): return '<> <>'.format(self.date, self.people.__str__()) def get_absolute_url(self): return reverse('date-detail', args=[str(self.id)]) class Meta: ordering = ['date'] 

Как вывести такие данные на сайт?

Отслеживать

задан 30 мая 2018 в 15:16

Александр Прощенков Александр Прощенков

23 6 6 бронзовых знаков

Как в django вывести таблицу

Рассмотрим базовые операции с моделями на простейшем примере. создание и вывод объектов модели на примере. Пусть, в файле models.py определена модель Person:

from django.db import models class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerField()

Определение представлений

В файле views.py пропишем четыре представления для получения, сохранения, редактирования и удаления данных:

from django.shortcuts import render from django.http import HttpResponseRedirect, HttpResponseNotFound from .models import Person # получение данных из бд def index(request): people = Person.objects.all() return render(request, "index.html", ) # сохранение данных в бд def create(request): if request.method == "POST": person = Person() person.name = request.POST.get("name") person.age = request.POST.get("age") person.save() return HttpResponseRedirect("/") # изменение данных в бд def edit(request, id): try: person = Person.objects.get(id=id) if request.method == "POST": person.name = request.POST.get("name") person.age = request.POST.get("age") person.save() return HttpResponseRedirect("/") else: return render(request, "edit.html", ) except Person.DoesNotExist: return HttpResponseNotFound("

Person not found

") # удаление данных из бд def delete(request, id): try: person = Person.objects.get(id=id) person.delete() return HttpResponseRedirect("/") except Person.DoesNotExist: return HttpResponseNotFound("

Person not found

")

В функции index() получаем все данные с помощью метода Person.objects.all() и передаем их в шаблон index.html.

В функции create() получаем данные из запроса типа POST, сохраняем данные с помощью метода save() и выполняем переадресацию на корень веб-сайта (то есть на функцию index).

Функция edit выполняет редактирование объекта. Функция в качестве параметра принимает идентификатор объекта в базе данных. И вначале по этому идентификатору мы пытаемся найти объект с помощью метода Person.objects.get(id=id) . Поскольку в случае отсутствия объекта мы можем столкнуться с исключением Person.DoesNotExist, то соответственно нам надо обработать подобное исключение, если вдруг будет передан несуществующий идентификатор. И если объект не будет найден, то пользователю возващается ошибка 404 через вызов return HttpResponseNotFound() .

Если объект найден, то обработка делится на две ветви. Если запрос POST, то есть если пользователь отправил новые изменненые данные для объекта, то сохраняем эти данные в бд и выполняем переадресацию на корень веб-сайта. Если запрос GET, то отображаем пользователю страницу edit.html с формой для редактирования объекта.

Функция delete аналогичным образом находит объет и выполняет его удаление.

Определение шаблонов

В папке templates определим шаблон index.html , который будет выводить данные на веб-страницу:

    METANIT.COM     



0 %>

Список пользователей

IdИмяВозраст > > > >">Изменить | >">Удалить

В начале шаблона определена форма для добавления данных, которые потом будет получать функция create в POST-запросе. А ниже определена таблица, в которую выводятся данные из переданного из представления набора people. В каждой строке определены ссылки на редактирование и удаление объекта.

Теперь добавим в папку templates файл edit.html со следующим содержимым:

    METANIT.COM     


>" />


>" />

Здесь определена форма для редактирования объекта. По нажатию на кнопку введенные на форму данные будут уходить по тому же адресу в запросе POST.

Установка маршрутов

И также в файле urls.py проекта свяжем маршруты с представлениями:

from django.urls import path from hello import views urlpatterns = [ path("", views.index), path("create/", views.create), path("edit//", views.edit), path("delete//", views.delete), ]

В итоге получится следующая структура проекта:

CRUD в Django

Запустим проект и обратимся к приложению в браузере. Вначале добавим несколько объектов через форму на веб-странице. И после каждого добавления мы увидим, как на веб-странице в таблице появляются новые данные:

Добавление и вывод моделей из базы данных на веб-страницу в Django

Нажав на ссылку редактирования, мы перейдем к форме, где мы сможем изменить значения выбранного объекта:

Изменение и удаление в базе данных в Django

Соответственно нажав на кнопку удаления в таблице объектов, мы удалим выбранный объект.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *