可选择django的插件(用于select2用户界面)

django-selectable-select2的Python项目详细描述


警告

这项工作仍在进行中。发布之间可能会发生一些向后不兼容的更改。

这个项目是django-selectable的一种插件。

它提供了用于名为select2的伟大js库的小部件,而不是jquery ui。

目前,只有一个基本的单值自动完成小部件可用于foreignkey(或简单的modelchoicefield)字段。

安装

  • 安装django-selectable(您可以操作jquery ui的相关部分)

  • 安装django-selectable-select2

    pip install django-selectable-select2
    
  • 添加可选择的应用程序。看起来是这样的:

    INSTALLED_APPS = (
        ...
        'selectable',
        'selectable_select2',
        ...
    )
    
  • 添加/更改设置SELECTABLE_ESCAPED_KEYS,如下所示:

    SELECTABLE_ESCAPED_KEYS = ('label', 'value')
    

您还可以获得所有静态文件依赖项,如下所示:

pip install django-staticfiles-jquery
pip install django-staticfiles-select2

并将它们添加到INSTALLED_APPS

INSTALLED_APPS = (
    ...
    'jquery',
    'staticfiles_select2',
    ...
)

用法

  • 定义您的lookup class

  • 在您的表单中,您可以使用selectable_select2.widgets.AutoCompleteSelect2Widget,就像这样:

    from selectable_select2.widgets import AutoCompleteSelect2Widget
    from django import forms
    
    from myapp.models import MyModel  # example model with a ForeignKey called ``myfk``
    from myapp.lookups import MyModelLookup  # the lookup defined in previous step
    
    class MyModelForm(forms.ModelForm):
    
        class Meta:
            model = MyModel
            widgets = {
                'myfk' : AutoCompleteSelect2Widget(MyModelLookup, placeholder='select related item')
            }
    

如何包含静态资产?

警告

从0.4.0版起,django-selectable-select2不包含select2本身的任何静态文件依赖项。 如果您的项目中没有django-staticfiles-select2和/或django-staticfiles jquery文件,请使用它们。

您可以手动包含这些资产(假设您使用的是django静态文件)。喜欢这样:

<html>
    <head>
        <link rel="stylesheet" href="{{ STATIC_URL }}staticfiles_select2/select2/select2.css">
    </head>

    <body>
        <form action="." method="post">
            {{ form.as_p }}
            <p><button type="submit">Submit</button></p>
        </form>

        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <script type="text/javascript" src="{{ STATIC_URL }}staticfiles_select2/select2/select2.min.js"></script>
        <script type="text/javascript" src="{{ STATIC_URL }}selectable_select2/js/jquery.dj.selectable.select2.js"></script>
    </body>
</html>

链式选择

有一种方法可以在django selectable中进行链式选择。 检查docs about chained selects以正确准备查找类 对于这个用例(您可以跳过javascript部分)。 django-selectable-select2提供了一个helper类来声明链式选择的依赖关系。 在你的表格上。

所以给定查找,从上面的链接并假设mymodel有foreignkeys 对于city和state,表单类可以从^{tt4}继承$ 定义select2_deps属性如下:

from selectable_select2.forms import Select2DependencyModelForm
from django import forms
from selectable_select2.widgets import AutoCompleteSelect2Widget

class ChainedForm(Select2DependencyModelForm):

    select2_deps = (
        ('city', { 'parents' : ['state'] }),
    )

    class Meta:
        model = MyModel
        widgets = {
            'city' : AutoCompleteSelect2Widget(CityLookup, placeholder='select city')
        }

还有适合于非基于模型的表单的Select2DependencyForm

注意

Select2DependencyModelFormSelect2DependencyFormselectable_select2.forms模块中,从名为 Select2DependencyFormMixin,它定义了一个名为apply_select2_deps的方法。 不要犹豫浏览这些类的源代码。

select2_deps是两个元组的元组,格式为('<;fieldname>;':{<;options dict>;}) 其中,选项dict是配置该字段依赖项的python字典。

选项dict的参考

家长
指定字段的上级字段名列表。 像上面的例子一样,你可以根据你选择的州来选择一个城市。 字段可以依赖于多个父级。默认为:[]
清除父变更
布尔值(真/假),指示当用户 更改其父级之一的选择/值。默认为:true
父名称映射

一个方便的选项(python字典),用于指示通过ajax为哪个父项发送哪个密钥名。 例如,假设字段child依赖于 链式选择。您可以指定:

select2_deps = (
    ('child', {
        parents : ['parent1', 'parent2' ]
        parents_namemap : { 'parent1' : 'parent', 'parent2' : 'parent' }
    }),
)

然后您的查找可以更清晰,并且只能搜索parent键 而不是在你的^{tt19}中与parent1parent2杂耍$ 方法。默认为:{}

查看示例项目以了解更多详细信息。

待办事项

查看todo.rst

关于django可选版本的说明

此应用程序所需的Django可选最低版本为0.7

学分

非常感谢Igor Vaynbergselect2)和Mark Lavindjango-selectable) 对于他们的项目,他们的支持和解决我问题的快速反应时间。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java例外。Lang.Stringindexoutofboundsexception索引超出范围(0)   java Spring引导Freemarker从2.2.0升级失败   重构Java反模式名称?包含对象的对象包含。。。等   用java处理JDBC可能出现的死锁的最佳方法   java无法访问主线程上的数据库,因为它可能会在很长一段时间内锁定UI   java如何将固定大小的画布包装在边框窗格中的滚动窗格居中?   java解析xsd文件后得到空结果   在html页面中表示XML文件的java   socketjava对象流   sql Java越界异常数据库   JavaJBoss7.1.1不会在Mavericks上启动   Twincat ADS事件驱动读取在一段时间后停止工作(Java)   java MyBatis使用生成的ID插入所有   Mojave上缺少MacOS Java控制面板   JavaGuice:如果多次注入相同的依赖项,是否注入了该依赖项的相同实例?