inflearn logo
강의

Course

Instructor

Complete Guide to Python/Django Web Service Development with React

Implementing instagram post_detail view

No post matches the given query

653

kwonjiwoo

20 asked

0

강사님 안녕하세요, 오류가 발생해서 질문 드립니다 ㅜㅜ

http://127.0.0.1:8000/post/1/
로 접속을 하면

계속 이와 같은 오류가 뜹니다 ㅠㅠ

이렇게 분명 포스트가 db 에 저장되어있는데 말이죠 .. ㅠㅠ

이전에 작성했었다가 사용자를 다시 지우면서 같이 삭제된 포스팅이 있는데 그것 때문에 pk 값이 꼬인 것은 아니겠죠?

 

urlpatterns = [
    path('post/new/', views.post_new, name='post_new'),
    path('post/<int:pk>/', views.post_detail, name='post_detail')
]

(제 앱 이름은 myblog 로 해두었습니다)

from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404, redirect, render
from .forms import PostForm
from .models import Post

# Create your views here.

@login_required
def post_new(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save() # 이걸 나중에 하면 안되나?
            post.tag_set.add(*post.extract_tag_list())
            messages.success(request, "포스팅을 등록했습니다.")
            return redirect("/") # TODO : get_absolute_url 활용
    else:
        form = PostForm()
    
    return render(request, "myblog/post_form.html", {
        "form": form,
    })


def post_detail(request, pk):
    post = get_object_or_404(Post, pk=pk)
    return render(request, "myblog/post_detail.html", {
        "post" : post,
    })

views.py

import re
from django.conf import settings
from django.db import models
from django.urls import reverse

# Create your models here.

class Post(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    photo = models.ImageField(upload_to="myblog/post/%Y/%m/%d")
    caption = models.CharField(max_length=1000)
    tag_set = models.ManyToManyField('Tag', blank=True)
    location = models.CharField(max_length=100)
    
    def __str__(self):
        return self.caption
    
    def extract_tag_list(self):
        tag_name_list = re.findall(r"#([a-zA-Z\dㄱ-힣]+)", self.caption)
        tag_list = []
        for tag_name in tag_name_list:
            tag, _ = Tag.objects.get_or_create(name=tag_name)
            tag_list.append(tag)
        return tag_list
    
    def get_absolute_url(self):
        return reverse("myblog:post_detail", args=[self.pk])
    

class Tag(models.Model):
    name = models.CharField(max_length=50, unique=True)

    def __str__(self):
        return self.name

models.py

이상한 부분은 없는 것 같습니다만 왜 이러는지 모르겠네요..ㅠㅠ

그런데 또 쌩뚱맞은 http://127.0.0.1:8000/post/5/

url 을 입력하면

아래와 같이 다른 오류가 뜹니다..

감사합니다 ! ㅠㅠ

react python django docker

Answer 2

0

pyhub

안녕하세요.

아래의 오류에서 "No Post matches the given query" 부분을 보셔야 합니다.

Raised by : myblog.views.post_detail 이라고 되어있죠. post_detail 뷰를 통해 발생한 예외이구요.

지정 pk=1 의 Post가 조회가 되지 않아, 404 오류가 발생한 것입니다. get_object_or_404 메서드는 지정 조건의 데이터가 없으면 아래와 같은 404 오류를 발생시킵니다.

image

이와 반대로 어떤 URL에 매칭되는 View가 없으면 아래와 같은 오류가 발생합니다. 같은 Page not found (404) 지만 세부 내역이 다름을 확인하실 수 있습니다.

image

데이터베이스에서 pk는 primary key의 약자로서 기본키를 뜻합니다. 장고 모델에서는 id 이름의 기본키가 디폴트로 생성이 되며, 저장되는 Post마다 1부터 1씩 자동증가하며 할당됩니다.

pk=1, 2, 3 의 Post가 없는 것은 생성하신 후에 삭제하셔서 그렇습니다. 삭제한 Post는 pk를 다시 1부터 되돌리진 않습니다. 삭제된 것은 삭제된 것으로 처리하기 위함입니다.

화이팅입니다. :-)

0

kwonjiwoo

감사합니다 !! 그럼 pk=1,2,3 은 앞으로 계속 비어있는 건가요?

0

pyhub

그렇습니다. :-)

0

kwonjiwoo

감사합니다 !!!!!

0

kwonjiwoo

post_detail 에서 extends 부분을 잘못 적어서 수정하였더니

이렇게 뜹니다 !! 그런데 url 보이시는 것처럼 pk 값이 1부터가 아니라 4부터 정상적으로 뜹니다.. ㅠㅠㅠㅠ 왜이럴까요 선생님?!! ㅜㅜㅜㅜ

안녕하세요.

0

44

1

[OneToOne Field Demo] get_user_model() 메서드를 활용해야 하는 이유?

0

267

1

useEffect 훅에서 else 유무에 따른 결과

0

207

1

useAxios 훅의 dependency array 설정

0

241

1

useEffect에서 변수 업데이트 관련 질문

0

378

1

rest_framework.generics.CreateAPIView의 model 속성 유무

0

262

1

bootstrap4

0

464

4

리뉴얼 강의가 오픈이 되면 기존 강의는 더이상 못보는걸까요

1

357

1

admin form에서 앞선 필드 선택 후 다른 필드 select widget 구성하는 방법

0

568

3

useState는 필수일까요?

0

256

1

python manage.py makemigrations instagram 시 created_at default 오류가 발생합니다.

0

589

4

Django allauth를 사용한 소셜 로그인 시 에러

0

648

1

프로젝트명 변경 뒤, 디버그툴바+디버그모드 사용 시 에러

0

548

2

useLocalStorage() 함수 사용여부

0

223

1

django에 LOGIN_URL = '/accounts/login/'의 의미?

0

443

1

리듀서의 의미 재확인

0

423

1

simple-jwt Refresh Token 사용 노하우

0

894

2

docker compose 를 통한 배포 관련 오류 문의

0

664

1

파이썬 속도 장고 관련 궁금한게 있습니다.

0

357

1

is_like_user

0

227

1

related_name 오류

0

267

1

re_path 오류

0

252

1

re_path url

0

243

1

sendgrid 메일 발송이 안됩니다 ㅠㅠ

0

884

3