Django测试通过for循环解析

Django测试通过for循环解析,django,unit-testing,django-rest-framework,django-testing,django-fixtures,Django,Unit Testing,Django Rest Framework,Django Testing,Django Fixtures,我在Django做一些测试。我使用fixture预加载一些数据并测试API POST。在我的帖子中,我想通过外键链接一些数据。测试行为很奇怪。我需要放置一个for循环以使其成功 以下是我的固定装置示例: [ { "model": "apps.track", "pk": 1, "fields": { "name": "Love Song # 1", "album": null } }, { "model": "apps.t

我在Django做一些测试。我使用fixture预加载一些数据并测试API POST。在我的帖子中,我想通过外键链接一些数据。测试行为很奇怪。我需要放置一个for循环以使其成功

以下是我的固定装置示例:

[
  {
    "model": "apps.track",
    "pk": 1,
    "fields": {
      "name": "Love Song # 1",
      "album": null
    }
  },
  {
    "model": "apps.track",
    "pk": 2,
    "fields": {
      "name": "Love Song # 2",
      "album": null
    }
  }
]
这是我的测试:

class TestPost(TestCase):
    fixtures = ['fixtures/sample']

    def setUp(self):
        self.album = {
            'name': 'Love Songs Album',
            'tracks': [
                {'id': 1},
                {'id': 2}
            ]
        }

    def test_post(self):
        c = Client()
        response = c.post(
            '/admin/login/', {'username': 'admin', 'password': 'passwordpassword'})
        response = c.post('/apps/albums/',
                          data=json.dumps(self.album),
                          content_type='application/json')

        album = Album.objects.latest('id')
        tracks = Track.objects.filter(album=album).all()

        self.assertEqual(tracks[0].id, 1)
        self.assertEqual(tracks[1].id, 2)
测试失败,仅找到
磁道id=2
,而未找到
磁道id=1
。但是,当我在测试断言之前添加一个
for循环
时,测试成功了

这是循环的魔力

for track in tracks:
    print("TRACK", track.id)

我想知道这背后是否有任何原因。

您的设备没有包含任何相册型号的数据?你能分享你得到的错误吗?相册不重要吗?我正在创建它,并从中关联轨迹。错误是self.assertEqual(磁道[0].id,1)
断言错误2!=1
尝试将
.order\u by('id')
添加到您的曲目查询中?哇,成功了!谢谢@IainShelvington。然而,我仍然很好奇
for loop
如何神奇地首先解决我的问题。