Opened 8 years ago
Last modified 8 years ago
#27128 closed Bug
A method model.objects.get(pk=obj.pk) returns many objects, but in a database is one. — at Version 1
Reported by: | Seti | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.9 |
Severity: | Normal | Keywords: | GenericRelation, Testing, Models |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Very strange behaviour of the Django ORM while testing (now I am using pytest)
I have two apps "books" and "replies".
The app "books" has two models http://pastebin.com/gDMi7UpU
The app "replies" has one model http://pastebin.com/u9FabQQA
For create new objects I am using factories for replies - http://pastebin.com/pGtiwS2m, for books and writers - http://pastebin.com/NQ6AWxib
While testing methods of queryset of the model Book I got error, where it should not be
A file querysets.py of the app "books" http://pastebin.com/FVnLLzxK
Tests for the file querysets.py of the app "books" http://pastebin.com/rmpDm0Ae
For testing I am using the pytest with next configuration in a file pytest.ini
[pytest] addopts = -s --reuse-db --ff --maxfail=1 apps/books/tests/test_querysets.py::Tests DJANGO_SETTINGS_MODULE=config.settings.development
Run test as next py.test
Traceback http://pastebin.com/Vv96XLzm
After many time googling and dipping in the Django`s code by the traceback I decided it is bug in the Django
I think it is the problem related with that models the Book and the Reply is related by help the field GenericRelation, but I don`t found facts for it.
Sorry for my grammar mistakes, I was no originally an English
If need another codes from my project, please tell about it
Update
Same error I had when tested a method "get_admin_url()" of the model Book with next a testing code
def test_get_admin_url(self): self.client.force_login(self.active_superuser) response = self.client.get(self.book.get_admin_url()) self.assertEqual(response.status_code, 200)
Ending a traceback
if not num: raise self.model.DoesNotExist( "%s matching query does not exist." % self.model._meta.object_name ) raise self.model.MultipleObjectsReturned( "get() returned more than one %s -- it returned %s!" % > (self.model._meta.object_name, num) ) E apps.books.models.MultipleObjectsReturned: get() returned more than one Book -- it returned 3!