SQL Server 2008 и Django нумерация страниц - PullRequest
0 голосов
/ 03 января 2019

Сейчас я отвечаю за поддержку пользовательского интерфейса, реализованного с помощью 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 записей навсегда, поэтому меня не волнуют проблемы масштабируемости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...