Как отобразить данные из таблицы Postgresql на сайте Django
Я пытался отобразить данные моей таблицы Postgresql на моем сайте Django и я использовал AWS RDS для подключения моего Postgresql к моему Django. Проблема в том, что он ничего не отображает, когда в таблице есть 3 заполненных тестовых данных. Как же правильно отобразить содержимое таблицы? В настоящее время я использую AWS RDS на Ubuntu с бесплатным уровнем.
На стороне Postgresql у меня есть сервер с именем mywebsiterds
и 3 базы данных: mywebsitedb
postgres
и rdsadmin
. Однако я использую только mywebsitedb
и создал новую схему внутри нее под названием newdb
(всего в ней 2 схемы под названием newdb
и public
). Внутри схемы newdb
я создал:
CREATE TABLE newdb.folders (
folderID SERIAL PRIMARY KEY,
folderName VARCHAR(50),
userID VARCHAR(50)
);
затем заполнил его:
INSERT INTO newdb.folders (folderName, userID) VALUES ('test folder 1', 'user1');
INSERT INTO newdb.folders (folderName, userID) VALUES ('test folder 2', 'user2');
INSERT INTO newdb.folders (folderName, userID) VALUES ('test folder 2', 'user2');
Я подключил свой Django к AWS RDS по адресу settings.py
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.environ.get("DB_NAME", None),
'USER': os.environ.get("DB_USERNAME", None),
'PASSWORD': os.environ.get("DB_PASSWORD", None),
'HOST': os.environ.get("DB_HOST", None),
'PORT': '5432'
}
}
В моем Django я создал приложение filesview
и выполнил команду python manage.py inspectdb > manage.py
. Я переместил папку manage.py
в мое приложение filesview
.
Когда я запускаю python manage.py dbshell
и делаю запрос к данным таблицы newdb.folders
, он выводит данные правильно. Однако, когда я запускаю python manage.py shell
и пишу простую функцию печати:
from filesview.models import NewdbFolders
folders = NewdbFolders.objects.all()
print(folders)
Он выводит: <QuerySet [] >
, что, как я предполагаю, является пустым набором данных. Это навело меня на мысль, что проблема в том, что Django не захватывает базу данных, но я не уверен, как это может быть, потому что я подключил ее так, как хотел, и запустил функции makemigrations
и migrate
, чтобы получить последние изменения. Я поместил "DB_Name" и все это в файл .env
и трижды проверил, что все совпадает. Я также разместил свои ключи доступа/секретные ключи AWS в верхней части settings.py
.
Вот код, который я использовал для его запуска (все внутри приложения filesview
):
views.py
:
from django.shortcuts import render, redirect
from django.http import JsonResponse
import json
import urllib.request
from django.conf import settings
from .models import NewdbFolders
def get_folder(request):
folder = NewdbFolders.objects.all()
print("Data from db:", folder)
return render(request, 'filesview/create_folder.html', {'folder': folder})
у него есть urls.py
:
from django.urls import path
from . import views
app_name = "filesview"
urlpatterns = [
path("home-view", views.home_view, name="home-view"),
path("create-folder", views.get_folder, name="create_folder"),
]
у него есть мой models.py
, который был автогенерирован:
from django.db import models
class NewdbFolders(models.Model):
folderid = models.IntegerField(db_column='folderID', primary_key=True)
foldername = models.CharField(db_column='folderName', max_length=50)
userid = models.CharField(db_column='userID', max_length=50)
class Meta:
managed = False
db_table = 'newdb.folders'
def __str__(self): # I added this
return self.foldername
Внутри моего приложения filesview
я создал другую папку templates
, внутри которой есть папка filesview
, внутри которой находятся все мои html-файлы (например, filesview/templates/filesview/create_folder.html
). Вот мой простой create_folder.html
для отображения содержимого:
{% extends 'layout.html' %}
{% load static %}
{% block content %}
<section>
<h1>Folders</h1>
{% for item in data %}
<p>{{ item.folderid }}</p>
<p>{{ item.foldername }}</p>
<p>{{ item.userid }}</p>
{% empty %}
<p>No folders found.</p>
{% endfor %}
</section>
{% endblock %}
Когда я запускаю сервер, он показывает "No folders found.", а в терминале:
Data from db: <QuerySet []>
[01/Aug/2024 10:51:44] "GET /filesview/create-folder HTTP/1.1" 200 489
[01/Aug/2024 10:51:45] "GET /favicon.ico HTTP/1.1" 404 179
Я думаю, что это Django не подключен, но я не понимаю, как он не подключен. Также на странице администрирования Django не отображается filesview
и таблицы под ним, хотя я выполнил команды migration
и makemigration
.
В моем AWS RDS говорится, что мой экземпляр запущен и у него 3 соединения. Все, что мне нужно, это чтобы на моей html-странице отображались мои folderid
, foldername
и userid
. Это все фиктивные значения, но я просто хочу убедиться, что смогу отобразить содержимое таблицы моей базы данных.
Я искал в Google, Youtube, документации Django и Stackoverflow, чтобы понять, в чем может быть проблема, но безрезультатно. Большинство из того, что я искал, просто показывает, как подключить базу данных к ней, но никогда не показывает отображаемый контент. Я следил за документацией по Django, но иногда я немного путаюсь. Я отредактировал коды несколькими способами, но он никогда ничего не отображает, потому что я думаю, что он считает, что таблица не заполнена.
Я работаю над этим в течение последних нескольких дней, и у меня возникли трудности с решением этой проблемы. Я не уверен, что я что-то упускаю из виду, но я не могу найти, что именно, или если я пишу что-то неправильно. Я также не уверен, чем еще можно поделиться, чтобы решить эту проблему, но я буду рад поделиться чем угодно, потому что кажется, что это должно быть просто. 😭 Я ценю любую помощь и буду очень благодарен.