可选择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变量始终存储0值。为什么?   如何使用Java/REST将Azure blob从一个存储容器移动到另一个存储容器?   java将commons DBCP从1.2升级到1.4,我应该害怕吗?   java如何使用分隔符拆分字符串?   java使用数组读取json对象   java在groovy中切片字符串   交换数组java的两个邻域元素   java移动用于确定字符串是否为回文的逻辑   java Android应用程序在一个活动中崩溃   java Sparkjava将webapp文件夹设置为静态资源/模板的文件夹   java复杂条件表达式,用户易用。   java如何仅在表存在时从表中选择值   java I无法将数据从Recyclerview传递到其他活动   java数据结构最佳设计(大数据)   java Android从DatePickerDialogFragment中删除日历视图   java将数据从Firebase获取到片段   数组。sort()在java中运行不正常