在工作中,我们使用的是django-admin网络应用程序。我想实现一些字段的django-ajax-selects功能。我们的网络与互联网隔离,我不能使用django-ajax-selects的CDN。文档说,在这种情况下,您应该在settings.py文件中将AJAX_SELECT_BOOTSTRAP设置为False。但是,当我设置这个参数时,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 createsuperusertest_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.nametest_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.nametest_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之前加载的。我想不出它是怎么回事,我怎么能指定加载顺序,或者有其他方法呢?模板重写不是很好的主意,因为其他应用程序已经使用了一些覆盖,我担心它可能会导致一些冲突。
发布于 2019-04-29 14:12:45
最后,我需要做的是手动下载jquery.min.js、jquery-ui.js、jquery-ui.css和jquery-ui images库,将它们放到app的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目录中。
https://stackoverflow.com/questions/55889537
复制相似问题