diff --git a/django/db/models/base.py b/django/db/models/base.py
index 115d82b..1bc273b 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -426,6 +426,8 @@ class Model(object):
         return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
 
     def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
+        if not self.pk:
+            raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
         op = is_next and 'gt' or 'lt'
         order = not is_next and '-' or ''
         param = smart_str(getattr(self, field.attname))
diff --git a/docs/ref/models/instances.txt b/docs/ref/models/instances.txt
index 404d473..eeba653 100644
--- a/docs/ref/models/instances.txt
+++ b/docs/ref/models/instances.txt
@@ -428,3 +428,5 @@ described in :ref:`Field lookups <field-lookups>`.
 
 Note that in the case of identical date values, these methods will use the ID
 as a fallback check. This guarantees that no records are skipped or duplicated.
+
+That also means you cannot use those methods on unsaved objects.
