>

나는 django-model 에 대한 간단한 테스트를 작성하고 있습니다  그리고 나는 단지 assertEqual 를 사용하고 있습니다.  그리고 assertNotEqual  그것을 위해. 이제 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'
    )

그러나 내가 직면하고있는 오류는 다음과 같습니다.

(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

BooleanField 를 테스트하는 올바른 방법이 무엇인지 설명해 줄 수 있습니까?  이 경우? 감사합니다.


  • 답변 # 1

    와이즈 비즈   get 의 방법  정확히 1 개의 항목을 반환합니다. 항목을 검색 할 수 없으면 오류가 발생하고 둘 이상의 항목을 검색하면 오류가 발생합니다.

    하나 이상의 항목을 예상하거나 전혀 항목이 없으면 QuerySet 를 사용해야합니다.  그 자체로 filter 를 리턴하는 메소드 .

    특정한 경우 QuerySet 필드를 기준으로 하나의 항목 만 검색 할 수는 없습니다. . 그것은 duplicate 입니다  값이 BooleanField 인 항목이 있습니다.  값이 True 인 항목 .

    False 에 대한 특정 항목을 검색해야합니다  그리고 stefan  다른 필드를 기반으로합니다.

  • 답변 # 2

    milan 에 지정된 선택 항목으로 여러 개체를 선택한 경우가 일반적입니다. . 귀하의 경우 여러 객체가 기준을 충족시킵니다. .

    get()  예를 들어 단 하나의 결과 만 제공된다고 확신 할 때만 사용해야합니다. duplicate == False 를 사용하여  선택기로.

    귀하의 경우 get() 를 사용할 수 있습니다   id 대신  둘 이상의 결과를 기대할 때. 그러나 filter()  객체를 반환하지 않지만 get() . 그러므로 당신은 filter() 의 항목을 비교하기 위해 당신의 주장을 조정해야합니다 .

    QuerySet

  • 이전 javascript - 검도 HTML 편집기
  • 다음 c++ - 람다의 캡처 목록에서 =이 포인터를 캡처합니까?