Matthew Daly Django教程测试失败

时间:2014-08-15 16:46:45

标签: django postgresql

我使用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和一般发展的新手。我们将非常感谢您提供的任何帮助。

1 个答案:

答案 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')

希望有所帮助!