Сейчас я отвечаю за поддержку пользовательского интерфейса, реализованного с помощью Django 1.11, но у меня нет опыта работы с фреймворком. Я (немного) опытный в питоне. Django подключен к некоторым внутренним серверам SQL, которые используют SQL Server 2008. Но Django внутренне использует PostgreSQL 9 (у которого нет проблем с разбиением на страницы).
В административном представлении пользовательского интерфейса (ip.address/admin
) есть запись класса (назовем ее MyClass
), рядом с которой расположены кнопки Add
и Modify
. MyClass
фактически извлекает результаты из одной таблицы базы данных SQLS2008. В тот момент, когда я нажимаю MyClass
, я получаю «Ошибка 500» с сообщением: « Неверный синтаксис рядом с« OFFSET ». Неправильное использование опции NEXT в операторе FETCH. « При поиске в SO, Я обнаружил, что это проблема несовместимости с SQL Server 2008, который не поддерживает операторы LIMIT ... OFFSET в предложении ORDER BY запроса SQL.
Я выяснил, что в файле admin.py
проекта Django есть место, где на самом деле зарегистрирована MyClass
для отображения:
from django.contrib import admin
from .models import MyClass
class MyClassAdmin(admin.ModelAdmin):
list_display = ('COL1', 'COL2', 'COL3', 'COL4', 'COL5', 'COL6')
admin.site.register(MyClass, MyClassAdmin)
Итак, если я закомментирую строку регистрации, MyClass
исчезнет из представления администратора, что является хорошим первым шагом. В models.py
есть MyClassQuerySet
, который выглядит следующим образом:
class MyClassQuerySet(models.QuerySet):
# this class only contains some functions that fetch stuff from the tables of the DB.
# All of them look like the one below
def function_number_one(self, as_list=False):
fields = ['COL1', 'COL2']
if as_list:
return self.values_list(*fields).distinct()
return self.values(*fields).distinct()
И MyClass
выглядит так:
class MyClass(models.Model):
# A Table's Columns are all declared here first as AutoField for the PK
# and as CharFields for the rest of the Table Columns.
objects = MyClassQuerySet.as_manager()
ОК, поэтому я копался в models.Model
и в классе SQLCompiler
в django/db/models/sql/models.py
я обнаружил, что функция класса as_sql()
содержит ключевое слово with_limits=True
, которое запускает часть LIMIT ... OFFSET, и я даже установил это ложь, но проблема сохраняется. Это было похоже на ужасный обходной путь, даже в виртуозности. Я также заглянул в класс admin.ModelAdmin
, но не смог найти ничего полезного.
Я искал SO и в Интернете и не смог найти что-либо о нумерации страниц Django для SQL Server 2008. Итак, это настоящий вопрос . Можно ли отключить нумерацию страниц для этого класса в представлении администратора? Или я могу переопределить оригинальную функцию нумерации страниц и использовать свою собственную?
Таблица, из которой MyClass
извлекает результаты, будет иметь около 200 записей навсегда, поэтому меня не волнуют проблемы масштабируемости.