๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Programming/Django

๐Ÿ“Œ [Django ์˜ค๋ฅ˜] QuerySet์„ ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๋ฉด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ (TypeError)

by Mandy's 2025. 7. 23.

๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ

ํ˜„์žฌ ๋ธ”๋กœ๊ทธ ํ”„๋กœ์ ํŠธ๋Š” ๊ธฐ์กด์— ํ•˜๋“œ์ฝ”๋”ฉ๋œ ๋”•์…”๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , Post ๋ชจ๋ธ์„ ํ†ตํ•œ DB ๊ธฐ๋ฐ˜์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.
์ด ๊ณผ์ •์—์„œ ๊ธฐ์กด ๋กœ์ง์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์˜ค๋‹ค๊ฐ€ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ž˜๋ชป ๋‹ค๋ฃจ๊ฒŒ ๋˜์–ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ’ฅ ์˜ค๋ฅ˜ ์ƒํ™ฉ

slug ๊ฐ’์œผ๋กœ ํŠน์ • ํฌ์ŠคํŠธ๋ฅผ ์ฐพ์œผ๋ ค๋Š” ์ฝ”๋“œ:

all_posts = Post.objects.all()
identified_post = next(post for post in all_posts if post['slug'] == slug)

์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€:

TypeError: QuerySet indices must be integers or slices, not str.

 

โ—๏ธ์›์ธ

Post.objects.all()์ด ๋ฐ˜ํ™˜ํ•˜๋Š” QuerySet์€ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค์˜ ๋ฆฌ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.
๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋Š” ๋”•์…”๋„ˆ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— post['slug']๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

โœ… ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

๋ชจ๋ธ์˜ ํ•„๋“œ์—๋Š” ์†์„ฑ์ฒ˜๋Ÿผ ์ ‘๊ทผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜๋Š” Django์˜ get_object_or_404()๋ฅผ ํ™œ์šฉํ•ด ๋”์šฑ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์†์„ฑ ์ ‘๊ทผ ๋ฐฉ์‹

identified_post = next(post for post in all_posts if post.slug == slug)

2. get_object_or_404 ์‚ฌ์šฉ

from django.shortcuts import get_object_or_404

def post_detail(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, "blog/post-detail.html", {"post": post})

 

๐Ÿงพ ์š”์•ฝ

๊ตฌ๋ถ„ ๋‚ด์šฉ

๋ฌธ์ œ ๋ชจ๋ธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ์ฒ˜๋Ÿผ ๋‹ค๋ฃธ
์›์ธ post['slug']๋กœ ์ ‘๊ทผ
ํ•ด๊ฒฐ post.slug ๋˜๋Š” get_object_or_404() ์‚ฌ์šฉ