Как я могу проверить пустой queryset в Django?

Я тестирую представление в Django, которое должно удалить все теги из объекта. Для этого я использую это утверждение:

self.assertEqual(list(Tag.objects.get_for_object(Animal.objects.get(pk=1))),[])

что хорошо работает, как я получаю пустой список. Я завернул запрос Django в список, чтобы избежать этого:

AssertionError: [] != []

где пустой запрос Django сравнивается с пустым списком.

но так как это не то, что мне очень нравится, я задавался вопросом, есть ли лучший способ сделать этот тест.

2 ответов


просто использовать exists

self.assertFalse(Tag.objects.get_for_object(Animal.objects.get(pk=1)).exists())

self.assertEqual(Tag.objects.get_for_object(Animal.objects.get(pk=1).count(), 0)

вы также можете использовать len() Если вы хотите применить набор запросов, оцениваемый как список!

поочередно и assertQuerysetEqual полезно, вы можете сделать сравнение с экземпляром 0f django.db.models.query.EmptyQuerySet! Но используя count() должен быть самый быстрый способ в большинстве случаев!