带有AJAX_SELECT_BOOTSTRAP = False的Django-ajax-selects

时间:2019-04-28 10:54:09

标签: python django django-admin django-ajax-selects

在工作中,我们正在使用\+ Webapp。我想为某些领域实现django-admin功能。我们的网络与Internet隔离,我无法使用django-ajax-selects的CDN。文档说,在这种情况下,应在django-ajax-selects文件中将AJAX_SELECT_BOOTSTRAP设置为False。但是,当我设置此参数时,settings.py无法使用django-ajax-selects的{​​{1}}。 django的版本为jqueryDjango

重现我的问题的步骤:

1.11.10

test_app / models.py

Python2

test_app / lookups.py

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 / admin.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

proj / settings.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 添加到# -*- 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' })

ajax_select

proj / urls.py

INSTALLED_APPS

然后

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

如果我像这样运行服务器,它就可以正常工作(因为它使用CDN加载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 设置为jquery,我将在浏览器的控制台中看到AJAX_SELECT_BOOTSTRAP,而False功能将无法使用。我猜想TypeError只是在加载ajax的{​​{1}}之前加载的。我无法弄清楚,如何指定装载顺序,或者还有其他方法?模板覆盖不是一个好主意,因为其他应用程序已经使用了一些覆盖,但恐怕会引起一些冲突。

1 个答案:

答案 0 :(得分:0)

最后,我需要手动下载jquery.min.jsjquery-ui.jsjquery-ui.cssjquery-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目录中。