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

Вернуться на верх