Loading django/db/models/query.py +0 −2 Original line number Diff line number Diff line Loading @@ -363,8 +363,6 @@ class QuerySet(object): Returns a tuple of (object, created), where created is a boolean specifying whether an object was created. """ assert kwargs, \ 'get_or_create() must be passed at least one keyword argument' defaults = kwargs.pop('defaults', {}) lookup = kwargs.copy() for f in self.model._meta.fields: Loading docs/ref/models/querysets.txt +6 −2 Original line number Diff line number Diff line Loading @@ -1343,8 +1343,12 @@ get_or_create .. method:: get_or_create(**kwargs) A convenience method for looking up an object with the given kwargs, creating one if necessary. A convenience method for looking up an object with the given kwargs (may be empty if your model has defaults for all fields), creating one if necessary. .. versionchanged:: 1.6 Older versions of Django required ``kwargs``. Returns a tuple of ``(object, created)``, where ``object`` is the retrieved or created object and ``created`` is a boolean specifying whether a new object was Loading docs/releases/1.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,9 @@ Minor features * The :exc:`~django.core.exceptions.DoesNotExist` exception now includes a message indicating the name of the attribute used for the lookup. * The :meth:`~django.db.models.query.QuerySet.get_or_create` method no longer requires at least one keyword argument. Backwards incompatible changes in 1.6 ===================================== Loading tests/get_or_create/models.py +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ class Person(models.Model): def __str__(self): return '%s %s' % (self.first_name, self.last_name) class DefaultPerson(models.Model): first_name = models.CharField(max_length=100, default="Anonymous") class ManualPrimaryKeyTest(models.Model): id = models.IntegerField(primary_key=True) data = models.CharField(max_length=100) Loading tests/get_or_create/tests.py +9 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ from django.db import IntegrityError, DatabaseError from django.utils.encoding import DjangoUnicodeDecodeError from django.test import TestCase, TransactionTestCase from .models import Person, ManualPrimaryKeyTest, Profile, Tag, Thing from .models import DefaultPerson, Person, ManualPrimaryKeyTest, Profile, Tag, Thing class GetOrCreateTests(TestCase): Loading Loading @@ -83,6 +83,14 @@ class GetOrCreateTests(TestCase): else: self.skipTest("This backend accepts broken utf-8.") def test_get_or_create_empty(self): # Regression test for #16137: get_or_create does not require kwargs. try: DefaultPerson.objects.get_or_create() except AssertionError: self.fail("If all the attributes on a model have defaults, we " "shouldn't need to pass any arguments.") class GetOrCreateTransactionTests(TransactionTestCase): Loading Loading
django/db/models/query.py +0 −2 Original line number Diff line number Diff line Loading @@ -363,8 +363,6 @@ class QuerySet(object): Returns a tuple of (object, created), where created is a boolean specifying whether an object was created. """ assert kwargs, \ 'get_or_create() must be passed at least one keyword argument' defaults = kwargs.pop('defaults', {}) lookup = kwargs.copy() for f in self.model._meta.fields: Loading
docs/ref/models/querysets.txt +6 −2 Original line number Diff line number Diff line Loading @@ -1343,8 +1343,12 @@ get_or_create .. method:: get_or_create(**kwargs) A convenience method for looking up an object with the given kwargs, creating one if necessary. A convenience method for looking up an object with the given kwargs (may be empty if your model has defaults for all fields), creating one if necessary. .. versionchanged:: 1.6 Older versions of Django required ``kwargs``. Returns a tuple of ``(object, created)``, where ``object`` is the retrieved or created object and ``created`` is a boolean specifying whether a new object was Loading
docs/releases/1.6.txt +3 −0 Original line number Diff line number Diff line Loading @@ -280,6 +280,9 @@ Minor features * The :exc:`~django.core.exceptions.DoesNotExist` exception now includes a message indicating the name of the attribute used for the lookup. * The :meth:`~django.db.models.query.QuerySet.get_or_create` method no longer requires at least one keyword argument. Backwards incompatible changes in 1.6 ===================================== Loading
tests/get_or_create/models.py +5 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,11 @@ class Person(models.Model): def __str__(self): return '%s %s' % (self.first_name, self.last_name) class DefaultPerson(models.Model): first_name = models.CharField(max_length=100, default="Anonymous") class ManualPrimaryKeyTest(models.Model): id = models.IntegerField(primary_key=True) data = models.CharField(max_length=100) Loading
tests/get_or_create/tests.py +9 −1 Original line number Diff line number Diff line Loading @@ -8,7 +8,7 @@ from django.db import IntegrityError, DatabaseError from django.utils.encoding import DjangoUnicodeDecodeError from django.test import TestCase, TransactionTestCase from .models import Person, ManualPrimaryKeyTest, Profile, Tag, Thing from .models import DefaultPerson, Person, ManualPrimaryKeyTest, Profile, Tag, Thing class GetOrCreateTests(TestCase): Loading Loading @@ -83,6 +83,14 @@ class GetOrCreateTests(TestCase): else: self.skipTest("This backend accepts broken utf-8.") def test_get_or_create_empty(self): # Regression test for #16137: get_or_create does not require kwargs. try: DefaultPerson.objects.get_or_create() except AssertionError: self.fail("If all the attributes on a model have defaults, we " "shouldn't need to pass any arguments.") class GetOrCreateTransactionTests(TransactionTestCase): Loading