Better error message for calling get_next_by_* on unsaved models.

Patch from Marc Fargas. Fixed #7435.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@13738 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Malcolm Tredinnick 2010-09-11 00:20:35 +00:00
parent 506d559876
commit 9802a73e25
2 changed files with 4 additions and 0 deletions

View File

@ -644,6 +644,8 @@ class Model(object):
return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True) return force_unicode(dict(field.flatchoices).get(value, value), strings_only=True)
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs): 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' op = is_next and 'gt' or 'lt'
order = not is_next and '-' or '' order = not is_next and '-' or ''
param = smart_str(getattr(self, field.attname)) param = smart_str(getattr(self, field.attname))

View File

@ -568,3 +568,5 @@ described in :ref:`Field lookups <field-lookups>`.
Note that in the case of identical date values, these methods will use the ID 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. as a fallback check. This guarantees that no records are skipped or duplicated.
That also means you cannot use those methods on unsaved objects.