diff --git a/django/db/models/query.py b/django/db/models/query.py
index be42d02..48e911b 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -414,8 +414,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:
diff --git a/docs/releases/1.4.txt b/docs/releases/1.4.txt
index 49284fb..b2a8889 100644
--- a/docs/releases/1.4.txt
+++ b/docs/releases/1.4.txt
@@ -480,6 +480,9 @@ Django 1.4 also includes several smaller improvements worth noting:
 * Added the :djadminopt:`--no-location` option to the :djadmin:`makemessages`
   command.
 
+* The :meth:`~django.db.models.query.QuerySet.get_or_create` method no longer
+  requires at least one keyword argument.
+
 .. _backwards-incompatible-changes-1.4:
 
 Backwards incompatible changes in 1.4
diff --git a/tests/modeltests/get_or_create/models.py b/tests/modeltests/get_or_create/models.py
index 1de5a6e..d97c6c2 100644
--- a/tests/modeltests/get_or_create/models.py
+++ b/tests/modeltests/get_or_create/models.py
@@ -17,6 +17,11 @@ class Person(models.Model):
     def __unicode__(self):
         return u'%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)
diff --git a/tests/modeltests/get_or_create/tests.py b/tests/modeltests/get_or_create/tests.py
index 4cf4450..47c7fef 100644
--- a/tests/modeltests/get_or_create/tests.py
+++ b/tests/modeltests/get_or_create/tests.py
@@ -5,7 +5,7 @@ from datetime import date
 from django.db import IntegrityError
 from django.test import TestCase
 
-from .models import Person, ManualPrimaryKeyTest
+from .models import Person, DefaultPerson, ManualPrimaryKeyTest
 
 
 class GetOrCreateTests(TestCase):
@@ -52,3 +52,10 @@ class GetOrCreateTests(TestCase):
             ManualPrimaryKeyTest.objects.get_or_create, id=1, data="Different"
         )
         self.assertEqual(ManualPrimaryKeyTest.objects.get(id=1).data, "Original")
+
+    def test_get_or_create_empty(self):
+        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.")
