-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
view on site 가 제대로 동작을 안합니다
20.06.01 15:23 작성 조회수 278
0
테스트 포스트의 pk는 7이고 그거 하나 뺴고 다 지워둔 상태입니다.
127.0.0.1:8000/blog/7/ 로 들어가면 정상적으로 포스트가 나오는데 admin 페이지의 view on site 버튼을 누르면 127.0.0.1:8000/admin/r/7/7/ 로 들어가지고
페이지가 작동하지 않습니다.
127.0.0.1에서 잘못된 응답을 전송했습니다.
이런 창이 뜹니다..
그냥 패스하고 그 다음인 tests.py에서 get_absolute_url을 테스트하는 부분으로 넘어가니
self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))
self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))
AttributeError: 'Manager' object has no attribute 'get_absolute_url'
이런 메시지가 뜨면서 테스트도 실패합니다.
제가 get_absolute_url()함수를 잘못 만든걸까요?
models.py
from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
head_image = models.ImageField(upload_to='blog/%Y/%m/%d/', blank=True)
created = models.DateTimeField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return str(self.title) + ' :: ' + str(self.author)
def get_absolute_url(self):
return 'blog/{}/'.format(self.pk)
tests.py
from django.test import TestCase, Client
from bs4 import BeautifulSoup
from .models import Post
from django.utils import timezone
from django.contrib.auth.models import User
def create_post(title, content, author):
blog_post = Post.objects.create(
title = title,
content = content,
created = timezone.now(),
author = author,
)
return blog_post
class TestView(TestCase):
def setUp(self):
self.client = Client()
self.author_000 = User.objects.create(username='Smith', password='nopassword')
def test_post_list(self):
response = self.client.get('/blog/')
self.assertEqual(response.status_code, 200)
soup = BeautifulSoup(response.content, 'html.parser')
title = soup.title
self.assertEqual(title.text, 'blog')
navbar = soup.find('div', id='navbar')
self.assertIn('Blog', navbar.text)
self.assertIn('About Me', navbar.text)
self.assertEqual(Post.objects.count(), 0)
self.assertIn('아직 게시물이 없습니다', soup.body.text)
post_000 = create_post(
title = 'test post',
content = 'hello world',
author = self.author_000,
)
self.assertGreater(Post.objects.count(), 0)
response = self.client.get('/blog/')
self.assertEqual(response.status_code, 200)
soup = BeautifulSoup(response.content, 'html.parser')
self.assertNotIn('아직 게시물이 없습니다', soup.body.text)
def test_post_detail(self):
self.assertEqual(Post.objects.count(), 0)
post_000 = create_post(
title = 'test post',
content = 'hello world',
author = self.author_000,
)
self.assertGreater(Post.objects.count(), 0)
self.assertEqual(Post.objects.get_absolute_url(), 'blog/{}'.format(post_000.pk))
답변을 작성해보세요.
0
SungYong Lee
지식공유자2020.06.02
models.py에서 get_absolute_url()은
return '/blog/{}/'.format(self.pk)가 되어야 합니다. 맨 앞에 슬래쉬를 빼놓으셨네요.
그리고 맨 마지막에 Post.objects.get_absolute_url() 이 아니라, post_000.get_absolute_url() 아닌가요?
답변 1