본문 바로가기

Python

python django postgres 데이터베이스 - 필터 기능 추가 (2/2)

python django postgres 데이터베이스 - 브라우저 출력(1/2) 에서 

데이터베이스 정보를 가져오는 부분이였으면,

 

python django postgres 데이터베이스 - 필터 기능 추가 (2/2)

에서는 데이터베이스의 내용에 필터를 걸어서 브라우저 출력하는 내용이다.

 

조건은 

소스 수정후

 브라우저 디폴트 출력 후,  화면 하단부에 있는 "필터 테스트 버튼" 을 클릭하면

database_d 데이터베이스의 custom_book_table 의 title 컬럼값에  문자열 "1" 이포함된 경우

필터링한 조건으로 하단부에 추가로 출력 한다.

 

이전에

django 프레임워크, venv환경, postgres 디비이름 : database_d, 아이디:users, 패스워드:1234

설정은 1/2 에서 확인했다.

 

터미널에 관련된 명령어를 확인하자.


pip install django

django-admin startproject myproject
python manage.py startapp appview

python manage.py createsuperuser

python manage.py runserver


 

아래 django 프로젝트 구조는

python django postgres 데이터베이스 - 브라우저 출력(1/2) 

과 같다.



아래 postgres 디비 스키마를 확인한다.

 

postgres 데이터베이스이름 : database_d

아이디  : users

패스워드 : 1234

테이블 이름 : custom_book_table

 

 


- TOBE django 수정할 파일(3개)

appview폴더 > urls.py

appview폴더 > views.py

appview폴더 > templates폴더 > appview폴더 > book_list.html 

# models.py (수정안함 그대로, 나머지 설정파일도 그대로)


#appview.urls.py

 

from django.urls import path
from . import views

urlpatterns = [
    path('', views.book_list, name='book_list'),  # 기본 화면: 전체 데이터 출력
    path('filter/', views.filter_books, name='filter_books'),  # 필터된 데이터 출력
]


 


#appview.views.py

 

from django.shortcuts import render
from .models import Book  # Book 모델을 import

def book_list(request):
    """
    book_list.html 화면에서 모든 책 데이터를 출력
    """
    books = Book.objects.all()  # 데이터베이스에서 모든 책 데이터를 가져옴
    filtered_books = None  # 필터링된 데이터 초기화
    return render(request, 'appview/book_list.html', {'books': books, 'filtered_books': filtered_books})

def filter_books(request):
    """
    "A" 버튼 클릭 시 custom_book_table의 title 컬럼에 "1"이 포함된 데이터를 필터링
    """
    books = Book.objects.filter(title__contains="1")  # title에 "1"이 포함된 데이터만 가져옴
    all_books = Book.objects.all()  # 전체 데이터 (필터링 전에 사용)
    return render(request, 'appview/book_list.html', {'books': all_books, 'filtered_books': books})



#appview.templates.appview.book_list.html

 

<!DOCTYPE html>
<html>
<head>
    <title>Book List</title>
</head>
<body>
    <h1>Book List</h1>

    <!-- 기존 테이블: 모든 책 데이터를 출력 -->
    <table border="1">
        <thead>
            <tr>
                <th>Title</th>
                <th>Author</th>
                <th>Published Date</th>
                <th>ISBN</th>
                <th>Pages</th>
                <th>Language</th>
            </tr>
        </thead>
        <tbody>
            <!-- Django의 템플릿 태그를 사용하여 데이터 출력 -->
            {% for book in books %}
            <tr>
                <td>{{ book.title }}</td>
                <td>{{ book.author }}</td>
                <td>{{ book.published_date }}</td>
                <td>{{ book.isbn_number }}</td>
                <td>{{ book.pages }}</td>
                <td>{{ book.language }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>

    <!-- "A" 버튼 -->
    <!-- 버튼 클릭 시 custom_book_table에서 "1"이 포함된 데이터를 표시 -->
    <form method="get" action="{% url 'filter_books' %}">
        <button type="submit">필터 테스트 버튼</button>
    </form>

    <!-- 아래는 필터링된 데이터가 있을 경우 출력 -->
    {% if filtered_books %}
    <h2>Filtered Books (Title includes "1")</h2>
    <table border="1">
        <thead>
            <tr>
                <th>Title</th>
                <th>Author</th>
                <th>Published Date</th>
                <th>ISBN</th>
                <th>Pages</th>
                <th>Language</th>
            </tr>
        </thead>
        <tbody>
            {% for book in filtered_books %}
            <tr>
                <td>{{ book.title }}</td>
                <td>{{ book.author }}</td>
                <td>{{ book.published_date }}</td>
                <td>{{ book.isbn_number }}</td>
                <td>{{ book.pages }}</td>
                <td>{{ book.language }}</td>
            </tr>
            {% endfor %}
        </tbody>
    </table>
    {% endif %}
</body>
</html>


 

상기 3개 파일의 스크립트 작성후 

터미널에 아래 명령어 실행


python manage.py migrate  #model.py 구조 정의 파일의 변경이 없으면 실행 하지 않아도 된다.

python manage.py runserver #브라우저에 띄울수 있다.


브라우저 창에 

 http://127.0.0.1:8000/

입력하면 아래 화면이 출력된다.

 


그리고 하단부에 있는 "필터 테스트 버튼" 을 클릭하면

database_d 데이터베이스의 custom_book_table 의 title 컬럼에 문자열 "1" 이포함된 경우에는

필터링한 조건 정보가 하단부에 출력 된다.