我使用postgres
代替mySQL
进行django安装。但是,在使用postgres进行测试时,我遇到了一个我无法解释的错误;如果我改回mySQL,则该错误不存在。
def test_edit_post(self):
# Create the post
post = Post()
post.title = 'My first post'
post.text = 'This is my first blog post'
post.pub_date = timezone.now()
post.save()
# Log in
self.client.login(username='FredFlintstone', password='Pebbles')
# Edit the post
response = self.client.post('/admin/blogengine/post/1/', {
'title': 'My second post',
'text': 'This is my second blog post',
'pub_date_0': '2013-08-08',
'pub_date_1': '22:00:04'
},
follow=True
)
self.assertEquals(response.status_code, 200)
如果我使用postgres,我会收到status_code 404,但它适用于mySQL
。
我怀疑我没有正确设置postgres,但这有效:
def test_create_post(self):
# Log in
self.client.login(username='FredFlintstone', password='Pebbles')
# Check add response code
response = self.client.get('/admin/blogengine/post/add/')
self.assertEquals(response.status_code, 200)
# Create new post
response = self.client.post('/admin/blogengine/post/add/', {
'title': 'My first post',
'text': 'This is my first post',
'pub_date_0': '2013-12-28',
'pub_date_1': '22:00:04'
},
follow=True
)
self.assertEquals(response.status_code, 200)
我是django和一般发展的新手。我们将非常感谢您提供的任何帮助。
答案 0 :(得分:0)
这个问题稍后出现在我做教程的最后一部分时,我们升级到Django 1.7。
这里有两个主要问题。首先,当我们尝试编辑或删除现有项目,或在创建其他项目时引用它时,我们不能再依赖表示主键设置为1的数字。所以我们需要专门获取它,而不是而不是硬编码为1.因此,每当我们通过一个数字来表示一个项目(除了网站,但包括标签,类别和帖子),我们需要取代它的主键并返回它。所以,在我们尝试删除帖子的地方,我们用str(post.pk)替换1。这将解决很多问题。
换句话说,您需要以编程方式获取帖子的主键,而不是在测试中对其进行硬编码。
解决方案是http://matthewdaly.co.uk/blog/2014/09/28/django-blog-tutorial-the-next-generation-part-9/,但我已在下面复制了它:
def test_edit_post(self):
# Create the post
post = PostFactory()
# Create the category
category = CategoryFactory()
# Create the tag
tag = TagFactory()
post.tags.add(tag)
# Log in
self.client.login(username='bobsmith', password="password")
# Edit the post
response = self.client.post('/admin/blogengine/post/' + str(post.pk) + '/', {
'title': 'My second post',
'text': 'This is my second blog post',
'pub_date_0': '2013-12-28',
'pub_date_1': '22:00:04',
'slug': 'my-second-post',
'site': '1',
'category': str(category.pk),
'tags': str(tag.pk)
},
follow=True
)
self.assertEquals(response.status_code, 200)
# Check changed successfully
self.assertTrue('changed successfully' in response.content)
# Check post amended
all_posts = Post.objects.all()
self.assertEquals(len(all_posts), 1)
only_post = all_posts[0]
self.assertEquals(only_post.title, 'My second post')
self.assertEquals(only_post.text, 'This is my second blog post')
希望有所帮助!