1
0
mirror of https://github.com/django/django.git synced 2025-03-06 15:32:33 +00:00

Fixed #36100 -- Checked if composite pk is set in get_next/get_previous.

This commit is contained in:
Jacob Walls 2025-01-15 07:49:12 -05:00 committed by Sarah Boyce
parent 6cfe00ee43
commit 1602666b79
2 changed files with 11 additions and 2 deletions

View File

@ -1299,7 +1299,7 @@ class Model(AltersData, metaclass=ModelBase):
)
def _get_next_or_previous_by_FIELD(self, field, is_next, **kwargs):
if not self.pk:
if not self._is_pk_set():
raise ValueError("get_next/get_previous cannot be used on unsaved objects.")
op = "gt" if is_next else "lt"
order = "" if is_next else "-"

View File

@ -1,6 +1,6 @@
from django.test import TestCase
from .models import Comment, Tenant, User
from .models import Comment, Tenant, TimeStamped, User
class CompositePKGetTests(TestCase):
@ -124,3 +124,12 @@ class CompositePKGetTests(TestCase):
def test_get_user_by_comments(self):
self.assertEqual(User.objects.get(comments=self.comment_1), self.user_1)
def test_get_previous_by_field(self):
stamp_1 = TimeStamped.objects.create(id=1)
stamp_2 = TimeStamped(id=2)
msg = "get_next/get_previous cannot be used on unsaved objects."
with self.assertRaisesMessage(ValueError, msg):
stamp_2.get_previous_by_created()
stamp_2.save()
self.assertEqual(stamp_2.get_previous_by_created(), stamp_1)