2012-11-13 21 views
0

我想測試創建一個Thing的視圖,您可以在其中選擇多個用戶(以及其他詳細信息)。Django:列出多對多關係中的元素

我定義了一個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

嗯,我不知道,不能嘗試它atm,但你可以嘗試將查詢集鑄造到列表 list(created_thing.users.all()) – PuercoPop

回答

2

列表理解是一個典型的從django queryset創建列表的方式,所以你做的非常好。

@PuercoPop建議的也很好 - 使用list(created_thing.users.all())是因爲它強制將queryset評估爲包含用戶對象的列表類型對象。

+0

list()確實有效。我很高興知道,列表解析是典型的方法。我對此並不滿意。現在我要放鬆了;)謝謝。 – Manur