На работе мы используем django-admin
веб-приложение.Я хотел реализовать функциональность django-ajax-selects
в некоторых областях.Наша сеть изолирована от Интернета, и я не могу использовать CDN django-ajax-selects
.Документация говорит, что в этом случае вы должны установить AJAX_SELECT_BOOTSTRAP
на False
в settings.py
файле.Однако когда я устанавливаю этот параметр, django-ajax-selects
не может использовать django
jquery
.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'
})
proj/settings.py - добавление приложения и ajax_select
к INSTALLED_APPS
INSTALLED_APPS = (
...
'ajax_select',
'test_app',
)
proj / 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
было загружено.Я не смог разобраться, как можно указать порядок загрузки или может быть есть другой способ?Переопределение шаблонов было бы не очень хорошей идеей, поскольку некоторые приложения уже переопределены, и я боюсь, что это может вызвать конфликты.