Django get_next_in_order и get_previous_in_order возвращают неверные данные, когда объекты хранятся в базе данных не по умолчанию
При использовании get_next_in_order и/или get_previous_in_order с базой данных, отличной от базы данных по умолчанию, я получаю следующую ошибку:
models.Car.DoesNotExist: Car matching query does not exist.
Версия платформы Django Framework - 4.1.1
Python версии 3.8
models.py:
from django.db import models
class Person(models.Model):
name = models.CharField(max_length=100, unique=True)
class Car(models.Model):
name = models.CharField(max_length=100)
owner = models.ForeignKey(Person, models.CASCADE)
class Meta:
order_with_respect_to = "owner"
В settings.py под DATABASES
используется следующее:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'other': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db_other.sqlite3',
}
}
Это можно проверить в Django Shell с помощью следующей команды python manage.py shell
:
>>> from models import Person, Car
>>> carowner = Person.objects.using("other").create(name="carowner")
>>> porsche = Car.objects.using("other").create(name="porsche", owner=carowner)
>>> ferrari = Car.objects.using("other").create(name="ferrari", owner=carowner)
>>> lamborghini = Car.objects.using("other").create(name="lamborghini", owner=carowner)
>>> carowner.set_car_order([lamborghini.pk, ferrari.pk, porsche.pk], "other")
>>> gnio = porsche.get_next_in_order()
>>> gnio.name # Should print ferrari
>>> gpio = porsche.get_previous_in_order()
>>> gpio.name # Should print lamborghini
Похоже, что эта проблема решена в Django Framework версии 4.1.2