MultipleObjectsReturned: get() 返回了多个 Fe​​ed -- 它返回了 2 个

cop*_*ser 1 testing django

我正在为 a 编写一些简单的测试,django-model我只是在为它使用assertEqualassertNotEqual。现在我还没有完全掌握如何BooleanField在这种情况下进行测试。我有一个model这样的领域:

duplicate = models.BooleanField(default=False)

我正在为它编写这个测试,只是为了检查它是否相等:

def test_feed_duplicate_create(self):
    stefan_feed_duplicate = Feed.objects.get(duplicate='False')
    milan_feed_duplicate = Feed.objects.get(duplicate='False')
    self.assertEqual(
        stefan_feed_duplicate.duplicate, 'False'
    )
    self.assertEqual(
        milan_feed_duplicate.duplicate, 'False'
    )
Run Code Online (Sandbox Code Playgroud)

但我面临的错误是:

(venv) vagrant@jessie:/var/www/vhosts/bspotted.net/app$ ./manage.py test --keepdb socialmedia
nosetests socialmedia --verbosity=1
Using existing test database for alias 'default'...
............E....................
======================================================================
ERROR: test_feed_duplicate_create (app.socialmedia.tests.test_feed_model.CommentsTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/var/www/vhosts/bspotted.net/app/socialmedia/tests/test_feed_model.py", line 225, in test_feed_duplicate_create
    stefan_feed_duplicate = Feed.objects.get(duplicate='False')
  File "/var/www/vhosts/bspotted.net/venv/lib/python3.4/site-packages/django/db/models/manager.py", line 127, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/var/www/vhosts/bspotted.net/venv/lib/python3.4/site-packages/django/db/models/query.py", line 338, in get
    (self.model._meta.object_name, num)
socialmedia.models.feed.MultipleObjectsReturned: get() returned more than one Feed -- it returned 2!

----------------------------------------------------------------------
Ran 33 tests in 0.159s
Run Code Online (Sandbox Code Playgroud)

有人能解释一下BooleanField在这种情况下什么是正确的测试方法吗?谢谢。

cez*_*zar 5

所述get的方法QuerySet返回恰好1(一)项。如果它无法检索到一个条目,它将抛出错误,如果它检索到多个条目,它将抛出一个错误。

如果您期望有多个条目,或者最终根本没有条目,您应该使用该filter方法,该方法返回自身 a QuerySet

在您的特定情况下,您不能仅根据 field 检索一个条目duplicate。它是 aBooleanField并且会有带有 value 的True条目和带有 value 的条目False

您有检索那些特定条目stefanmilan基于另一个领域。