首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django-ajax-使用AJAX_SELECT_BOOTSTRAP = False进行选择

Django-ajax-使用AJAX_SELECT_BOOTSTRAP = False进行选择
EN

Stack Overflow用户
提问于 2019-04-28 10:54:08
回答 1查看 689关注 0票数 0

在工作中,我们使用的是django-admin网络应用程序。我想实现一些字段的django-ajax-selects功能。我们的网络与互联网隔离,我不能使用django-ajax-selects的CDN。文档说,在这种情况下,您应该在settings.py文件中将AJAX_SELECT_BOOTSTRAP设置为False。但是,当我设置这个参数时,django-ajax-selects无法使用djangojqueryDjango的版本是1.11.10Python2

复制我的问题的步骤:

代码语言:javascript
复制
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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
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

代码语言:javascript
复制
# -*- 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

代码语言:javascript
复制
INSTALLED_APPS = (
    ...
    'ajax_select',
    'test_app',
)

proj/urls.py

代码语言:javascript
复制
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)),
]

然后

代码语言:javascript
复制
python manage.py makemigrations test_app
python manage.py migrate

如果我这样运行服务器,它的工作非常好(因为它使用CDN来加载jquery和其他东西)。但是,如果我将AJAX_SELECT_BOOTSTRAP设置为False,我将在浏览器的控制台中获得一个TypeError,而ajax功能将无法工作。我猜ajax_select.js只是在加载djangojquery之前加载的。我想不出它是怎么回事,我怎么能指定加载顺序,或者有其他方法呢?模板重写不是很好的主意,因为其他应用程序已经使用了一些覆盖,我担心它可能会导致一些冲突。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-29 14:12:45

最后,我需要做的是手动下载jquery.min.jsjquery-ui.jsjquery-ui.cssjquery-ui images库,将它们放到app的static目录中,并在admin.py中指向它们

admin.py

代码语言:javascript
复制
...
@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目录中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55889537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档