【问题标题】:Django: make a list of the elements from a many-to-many relationshipDjango:从多对多关系中列出元素
【发布时间】:2012-11-13 09:32:44
【问题描述】:

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

我定义了一个 Thing 模型,有一个“users”ManyToManyField 到 User 模型(来自 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。

【问题讨论】:

  • 好吧,我不确定也不能在 atm 尝试,但您可以尝试将查询集转换为列表 list(created_thing.users.all())

标签: python django unit-testing django-models


【解决方案1】:

列表理解是从 django queryset 创建列表的典型方法,因此您所做的非常好。

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

【讨论】:

  • list() 确实有效。我很高兴知道列表推导是典型的方法;我对此不太满意。现在我要放松了;)谢谢。
猜你喜欢
  • 2013-01-22
  • 2023-04-09
  • 2011-12-15
  • 2011-09-14
  • 2012-02-26
  • 1970-01-01
相关资源
最近更新 更多