Django:列出多对多关系中的元素

时间:2012-11-13 09:32:45

标签: python django unit-testing django-models

我想测试创建Thing的视图,您可以选择多个用户(以及其他详细信息)。

我定义了一个Thing模型,向用户模型提供了一个“用户”ManyToManyField(来自Django发布的身份验证应用程序)。

这是我的测试代码:

class ViewsTest(TestCase):
    def test_create(self):
        my_users = [...some User instances...]
        response = self.client.post("/create/", {...stuff...,
                                'users': [user.id for user in my_users]})
        self.assertEqual(200, response.status_code)
        created_thing = Thing.objects.get(...)
        self.assertListEqual(my_users, [user for user in created_thing.users.all()])

这个测试通过,所以一切都很好,但最后我对列表理解感到恼火。是否有更优雅的方式将 created_thing.users 作为列表?

我正在使用Django 1.4.1。

1 个答案:

答案 0 :(得分:2)

列表理解是一种从django queryset创建列表的典型方法,所以你所做的完全没问题。

@PuercoPop建议的内容也很好 - 使用list(created_thing.users.all()),因为它强制将queryset评估为包含用户对象的列表类型对象。