Как отобразить данные из таблицы 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, но иногда я немного путаюсь. Я отредактировал коды несколькими способами, но он никогда ничего не отображает, потому что я думаю, что он считает, что таблица не заполнена.

Я работаю над этим в течение последних нескольких дней, и у меня возникли трудности с решением этой проблемы. Я не уверен, что я что-то упускаю из виду, но я не могу найти, что именно, или если я пишу что-то неправильно. Я также не уверен, чем еще можно поделиться, чтобы решить эту проблему, но я буду рад поделиться чем угодно, потому что кажется, что это должно быть просто. 😭 Я ценю любую помощь и буду очень благодарен.

Вернуться на верх