Django-ajax выбирает с помощью AJAX_SELECT_BOOTSTRAP = False

На работе мы используем django-admin веб-приложение. Я хотел реализовать функционал django-ajax-selects для некоторых полей. Наша сеть изолирована от Интернета, и я не могу использовать CDN django-ajax-selects. В документации сказано, что в таком случае вы должны установить AJAX_SELECT_BOOTSTRAP на False в settings.py файле. Однако, когда я устанавливаю этот параметр, django-ajax-selects не использует djangojquery. Django версия 1.11.10, Python2.

Шаги для воспроизведения моей проблемы:

pip install django==1.11.10 django-ajax-selects
django-admin startproject proj ./
python manage.py startapp test_app
python manage.py migrate
python manage.py createsuperuser

test_app/models.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models


class Tag(models.Model):
    name = models.CharField(max_length=100)
    something = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class SecondModel(models.Model):
    name = models.CharField(max_length=200)
    tag = models.ForeignKey(Tag, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

test_app/lookups.py

from ajax_select import register, LookupChannel
from .models import Tag

@register('tags')
class TagsLookup(LookupChannel):

    model = Tag

    def get_query(self, q, request):
        return self.model.objects.filter(name__icontains=q)

    def format_item_display(self, item):
        return u"<span class='tag'>%s</span>" % item.name

test_app/admin.py

# -*- coding: utf-8 -*-
from django.contrib import admin
from ajax_select import make_ajax_form
from .models import Tag, SecondModel


@admin.register(Tag)
class TagAdmin(admin.ModelAdmin):
    fields = ['name', 'something']


@admin.register(SecondModel)
class SecondModelAdmin(admin.ModelAdmin):

    form = make_ajax_form(SecondModel, {
        'tag': 'tags'
    })

проект/settings.py - добавление приложения и ajax_select в INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'ajax_select',
    'test_app',
)

проект/urls.py

from django.conf.urls import url, include
from django.contrib import admin
from ajax_select import urls as ajax_select_urls

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^ajax_select/', include(ajax_select_urls)),
]

потом

python manage.py makemigrations test_app
python manage.py migrate

Если я запускаю сервер таким образом, он работает абсолютно нормально (потому что он использует CDN для загрузки jquery и прочего). Но если я установлю AJAX_SELECT_BOOTSTRAP на False, я получу TypeError в консоли браузера, и функциональность ajax не будет работать. Я предполагаю, что ajax_select.js просто загружается до того, как django был загружен jquery. Я не мог понять, как указать порядок загрузки или может быть есть другой способ? Переопределение шаблона было бы не очень хорошей идеей, так как некоторые переопределения уже используются другими приложениями, и я боюсь, что это может вызвать некоторые конфликты.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
579
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце концов, мне нужно было вручную загрузить jquery.min.js, jquery-ui.js, jquery-ui.css, а также библиотеку jquery-ui images, поместить их в каталог приложения static и указать на них в admin.py:

admin.py

...
@admin.register(SecondModel)
class SecondModelAdmin(admin.ModelAdmin):
    form = SecondModelForm

    class Media:
        js = ["/static/js/jquery.min.js",
              "/static/js/jquery-ui.js"]
        css = {'all': ["/static/css/jquery-ui.css"]}

Также не забудьте запустить python manage.py collectstatic для копирования статических файлов в общий static каталог.

Другие вопросы по теме