From ddc156bca2519dfb60974f49d085826d0a778f77 Mon Sep 17 00:00:00 2001 From: Gary Wilson Jr Date: Fri, 15 Aug 2008 23:29:55 +0000 Subject: [PATCH] Fixed #6970 -- Raise the original `IntegrityError` when all required fields aren't specified in `get_or_create` instead of a misleading `DoesNotExist` error, thanks deadwisdom. git-svn-id: http://code.djangoproject.com/svn/django/trunk@8398 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/models/query.py | 5 ++++- tests/modeltests/get_or_create/models.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/django/db/models/query.py b/django/db/models/query.py index d82cdf4d965..1bc84c47ca2 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -332,7 +332,10 @@ class QuerySet(object): return obj, True except IntegrityError, e: transaction.savepoint_rollback(sid) - return self.get(**kwargs), False + try: + return self.get(**kwargs), False + except self.model.DoesNotExist: + raise e def latest(self, field_name=None): """ diff --git a/tests/modeltests/get_or_create/models.py b/tests/modeltests/get_or_create/models.py index 3a1b447c979..5c35bb4becc 100644 --- a/tests/modeltests/get_or_create/models.py +++ b/tests/modeltests/get_or_create/models.py @@ -50,4 +50,11 @@ True False >>> Person.objects.count() 2 + +# If you don't specify a value or default value for all required fields, you +# will get an error. +>>> p, created = Person.objects.get_or_create(first_name='Tom', last_name='Smith') +Traceback (most recent call last): +... +IntegrityError:... """}