스터디/Web

[Django] 모델 만들고 페이지에서 조회하기

sollllllll 2022. 1. 13. 00:14

참고: https://wikidocs.net/70650

 

 

이전 글에서 모델을 만들고 migrate 해서 앱에 적용하는 방법까지 배웠다.

이것을 내 프로젝트에 적용해서 모델을 만들고 데이터를 조회하는 페이지를 만들어보도록 하겠다.

 

 

(1) 모델 만들기 (models.py 파일 작성)

모델 > User 테이블

속성명 데이터타입
userId (PK) int
userEmail varchar(30)
userPw varchar(20)
userName varchar(20)

 

모델 > Review 테이블

속성명 데이터타입
reviewId (PK) int
userId (FK) int
bookId varchar(30)
reviewTxt text

다음의 속성을 가진 유저 테이블과 서평 테이블을 생성한다.

class User(models.Model):
    userId = models.IntegerField(primary_key=True)
    userEmail = models.CharField(max_length=30)
    userPw = models.CharField(max_length=20)
    userName = models.CharField(max_length=20)

    # userId를 기본으로 반환한다
    def __int__(self):
        return self.userId

class Review(models.Model):
    userId = models.ForeignKey(User, on_delete=models.CASCADE)
    bookId = models.CharField(max_length=30)
    reviewId = models.IntegerField(primary_key=True)
    reviewTxt = models.TextField()

    # reviewId를 기본으로 반환한다
    def __int__(self):
        return self.reviewId

 

 

(2) urls.py 파일 수정

urlpatterns = [
    ...
    path('', views.list, name='list'),
    ...
]

서평 앱의 기본 경로로 접속하면 데이터 목록을 볼 수 있도록 한다.

 

 

(3) views.py 파일 수정

def list(request):
    review_list = Review.objects.order_by('-reviewId')
    context = {'review_list': review_list}
    return render(request, 'review/list.html', context)

reviewId의 역순으로 데이터를 정렬해 페이지에 띄우도록 조회 과정에 order_by('-속성') 를 추가했다.

모델에서 데이터를 받아와 list.html 로 전달한다. (context 사용)

 

 

(4) list.html 파일 작성

{% if review_list %}
<ol>
{% for review in review_list %}
    <li><a href="/review/{{ review.reviewId }}/">
        <div>
            제목 - Id: {{ review.reviewId }} <br>
            책 제목 - ISBN: {{ review.bookId }} <br>
            {{ review.reviewTxt }}
        </div>
    </a></li>
{% endfor %}
</ol>
{% else %}
    <p>서평이 없습니다.</p>
{% endif %}

조건문을 통해 전달받은 review_list 가 있는지 판별하고 있으면 데이터 목록을 띄우고

만약 없다면 데이터가 없다는 문구를 띄운다.

 

 

이 과정을 거치면 다음의 결과를 얻을 수 있다.

데이터 목록 조회 페이지