Issue4, more fixes.

This commit is contained in:
AppleGrew (applegrew) 2012-09-01 01:17:08 +05:30
parent 7152641ab5
commit 3f65a2349f
23 changed files with 2133 additions and 142 deletions

View file

@ -67,6 +67,7 @@ class AutoViewFieldMixin(object):
"See :py:meth:`.views.Select2View.get_results`."
raise NotImplementedError
import copy
from django import forms
@ -90,12 +91,14 @@ class Select2ChoiceField(forms.ChoiceField):
"""
widget = Select2Widget
class Select2MultipleChoiceField(forms.MultipleChoiceField):
"""
Drop-in Select2 replacement for :py:class:`forms.MultipleChoiceField`.
"""
widget = Select2MultipleWidget
### Model fields related mixins ###
class ModelResultJsonMixin(object):
@ -235,6 +238,7 @@ class ModelResultJsonMixin(object):
res = [ (getattr(obj, self.to_field_name), self.label_from_instance(obj), ) for obj in res ]
return (NO_ERR_RESP, has_more, res, )
class UnhideableQuerysetType(type):
"""
This does some pretty nasty hacky stuff, to make sure users can
@ -263,6 +267,7 @@ class UnhideableQuerysetType(type):
kwargs['queryset'] = getattr(cls, '_subclass_queryset')
return type.__call__(cls, *args, **kwargs)
class ChoiceMixin(object):
"""
Simple mixin which provides a property -- ``choices``. When ``choices`` is set,
@ -280,6 +285,7 @@ class ChoiceMixin(object):
choices = property(_get_choices, _set_choices)
class QuerysetChoiceMixin(ChoiceMixin):
"""
Overrides ``choices``' getter to return instance of :py:class:`.ModelChoiceIterator`
@ -303,6 +309,7 @@ class QuerysetChoiceMixin(ChoiceMixin):
choices = property(_get_choices, ChoiceMixin._set_choices)
class ModelChoiceFieldMixin(object):
def __init__(self, *args, **kwargs):
@ -326,14 +333,17 @@ class ModelChoiceFieldMixin(object):
if hasattr(self, '_queryset'):
return self._queryset
### Slightly altered versions of the Django counterparts with the same name in forms module. ###
class ModelChoiceField(ModelChoiceFieldMixin, forms.ModelChoiceField):
queryset = property(ModelChoiceFieldMixin._get_queryset, forms.ModelChoiceField._set_queryset)
class ModelMultipleChoiceField(ModelChoiceFieldMixin, forms.ModelMultipleChoiceField):
queryset = property(ModelChoiceFieldMixin._get_queryset, forms.ModelMultipleChoiceField._set_queryset)
### Light Fileds specialized for Models ###
class ModelSelect2Field(ModelChoiceField) :
@ -344,6 +354,7 @@ class ModelSelect2Field(ModelChoiceField) :
"""
widget = Select2Widget
class ModelSelect2MultipleField(ModelMultipleChoiceField) :
"""
Light multiple-value Select2 field, specialized for Models.
@ -352,11 +363,12 @@ class ModelSelect2MultipleField(ModelMultipleChoiceField) :
"""
widget = Select2MultipleWidget
### Heavy fields ###
class HeavySelect2FieldBase(ChoiceMixin, forms.Field):
class HeavySelect2FieldBaseMixin(object):
"""
Base field for all Heavy fields.
Base mixin field for all Heavy fields.
"""
def __init__(self, *args, **kwargs):
"""
@ -382,7 +394,7 @@ class HeavySelect2FieldBase(ChoiceMixin, forms.Field):
raise ValueError('data_view is required else you need to provide your own widget instance.')
kargs.update(kwargs)
super(HeavySelect2FieldBase, self).__init__(*args, **kargs)
super(HeavySelect2FieldBaseMixin, self).__init__(*args, **kargs)
# By this time self.widget would have been instantiated.
@ -398,28 +410,37 @@ class HeavySelect2FieldBase(ChoiceMixin, forms.Field):
choices = self.choices
self.choices = choices
class HeavySelect2ChoiceField(HeavySelect2FieldBase):
class HeavySelect2ChoiceField(HeavySelect2FieldBaseMixin, forms.ChoiceField):
"Heavy Select2 Choice field."
widget = HeavySelect2Widget
class HeavySelect2MultipleChoiceField(HeavySelect2FieldBase):
class HeavySelect2MultipleChoiceField(HeavySelect2FieldBaseMixin, forms.MultipleChoiceField):
"Heavy Select2 Multiple Choice field."
widget = HeavySelect2MultipleWidget
### Heavy field specialized for Models ###
class HeavyModelSelect2ChoiceField(QuerysetChoiceMixin, HeavySelect2ChoiceField, ModelChoiceField):
class HeavyModelSelect2ChoiceField(QuerysetChoiceMixin, HeavySelect2FieldBaseMixin, ModelChoiceField):
"Heavy Select2 Choice field, specialized for Models."
widget = HeavySelect2Widget
def __init__(self, *args, **kwargs):
kwargs.pop('choices', None)
super(HeavyModelSelect2ChoiceField, self).__init__(*args, **kwargs)
class HeavyModelSelect2MultipleChoiceField(QuerysetChoiceMixin, HeavySelect2MultipleChoiceField, ModelMultipleChoiceField):
class HeavyModelSelect2MultipleChoiceField(QuerysetChoiceMixin, HeavySelect2FieldBaseMixin, ModelMultipleChoiceField):
"Heavy Select2 Multiple Choice field, specialized for Models."
widget = HeavySelect2MultipleWidget
def __init__(self, *args, **kwargs):
kwargs.pop('choices', None)
super(HeavyModelSelect2MultipleChoiceField, self).__init__(*args, **kwargs)
### Heavy general field that uses central AutoView ###
class AutoSelect2Field(AutoViewFieldMixin, HeavySelect2ChoiceField):
@ -428,6 +449,8 @@ class AutoSelect2Field(AutoViewFieldMixin, HeavySelect2ChoiceField):
This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming
json query requests for that type (class).
.. warning:: :py:exc:`NotImplementedError` would be thrown if :py:meth:`get_results` is not implemented.
"""
widget = AutoHeavySelect2Widget
@ -437,12 +460,15 @@ class AutoSelect2Field(AutoViewFieldMixin, HeavySelect2ChoiceField):
kwargs['data_view'] = self.data_view
super(AutoSelect2Field, self).__init__(*args, **kwargs)
class AutoSelect2MultipleField(AutoViewFieldMixin, HeavySelect2MultipleChoiceField):
"""
Auto Heavy Select2 field for multiple choices.
This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming
json query requests for that type (class).
.. warning:: :py:exc:`NotImplementedError` would be thrown if :py:meth:`get_results` is not implemented.
"""
widget = AutoHeavySelect2MultipleWidget
@ -452,6 +478,7 @@ class AutoSelect2MultipleField(AutoViewFieldMixin, HeavySelect2MultipleChoiceFie
kwargs['data_view'] = self.data_view
super(AutoSelect2MultipleField, self).__init__(*args, **kwargs)
### Heavy field, specialized for Model, that uses central AutoView ###
class AutoModelSelect2Field(ModelResultJsonMixin, AutoViewFieldMixin, HeavyModelSelect2ChoiceField):
@ -471,6 +498,7 @@ class AutoModelSelect2Field(ModelResultJsonMixin, AutoViewFieldMixin, HeavyModel
kwargs['data_view'] = self.data_view
super(AutoModelSelect2Field, self).__init__(*args, **kwargs)
class AutoModelSelect2MultipleField(ModelResultJsonMixin, AutoViewFieldMixin, HeavyModelSelect2MultipleChoiceField):
"""
Auto Heavy Select2 field for multiple choices, specialized for Models.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,582 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>django_select2.fields &mdash; Django-Select2 3.0 documentation</title>
<link rel="stylesheet" href="../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '3.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="Django-Select2 3.0 documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for django_select2.fields</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Contains all the Django fields for Select2.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<div class="viewcode-block" id="AutoViewFieldMixin"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoViewFieldMixin">[docs]</a><span class="k">class</span> <span class="nc">AutoViewFieldMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Registers itself with AutoResponseView.</span>
<span class="sd"> All Auto fields must sub-class this mixin, so that they are registered.</span>
<span class="sd"> .. warning:: Do not forget to include ``&#39;django_select2.urls&#39;`` in your url conf, else,</span>
<span class="sd"> central view used to serve Auto fields won&#39;t be available.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="AutoViewFieldMixin.__init__"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoViewFieldMixin.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Class constructor.</span>
<span class="sd"> :param auto_id: The key to use while registering this field. If it is not provided then</span>
<span class="sd"> an auto generated key is used.</span>
<span class="sd"> .. tip::</span>
<span class="sd"> This mixin uses full class name of the field to register itself. This is</span>
<span class="sd"> used like key in a :py:obj:`dict` by :py:func:`.util.register_field`.</span>
<span class="sd"> If that key already exists then the instance is not registered again. So, eventually</span>
<span class="sd"> all instances of an Auto field share one instance to respond to the Ajax queries for</span>
<span class="sd"> its fields.</span>
<span class="sd"> If for some reason any instance needs to be isolated then ``auto_id`` can be used to</span>
<span class="sd"> provide a unique key which has never occured before.</span>
<span class="sd"> :type auto_id: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;auto_id&#39;</span><span class="p">,</span> <span class="s">u&quot;</span><span class="si">%s</span><span class="s">.</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__module__</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__class__</span><span class="o">.</span><span class="n">__name__</span><span class="p">))</span>
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Registering auto field: </span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">util</span>
<span class="n">id_</span> <span class="o">=</span> <span class="n">util</span><span class="o">.</span><span class="n">register_field</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">field_id</span> <span class="o">=</span> <span class="n">id_</span>
<span class="nb">super</span><span class="p">(</span><span class="n">AutoViewFieldMixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="AutoViewFieldMixin.security_check"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoViewFieldMixin.security_check">[docs]</a> <span class="k">def</span> <span class="nf">security_check</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns ``False`` if security check fails.</span>
<span class="sd"> :param request: The Ajax request object.</span>
<span class="sd"> :type request: :py:class:`django.http.HttpRequest`</span>
<span class="sd"> :param args: The ``*args`` passed to :py:meth:`django.views.generic.View.dispatch`.</span>
<span class="sd"> :param kwargs: The ``**kwargs`` passed to :py:meth:`django.views.generic.View.dispatch`.</span>
<span class="sd"> :return: A boolean value, signalling if check passed or failed.</span>
<span class="sd"> :rtype: :py:obj:`bool`</span>
<span class="sd"> .. warning:: Sub-classes should override this. You really do not want random people making</span>
<span class="sd"> Http reqeusts to your server, be able to get access to sensitive information.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">True</span>
</div>
<div class="viewcode-block" id="AutoViewFieldMixin.get_results"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoViewFieldMixin.get_results">[docs]</a> <span class="k">def</span> <span class="nf">get_results</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="s">&quot;See :py:meth:`.views.Select2View.get_results`.&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span>
</div></div>
<span class="kn">import</span> <span class="nn">copy</span>
<span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
<span class="kn">from</span> <span class="nn">django.forms.models</span> <span class="kn">import</span> <span class="n">ModelChoiceIterator</span>
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">ugettext_lazy</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="kn">import</span> <span class="n">smart_unicode</span>
<span class="kn">from</span> <span class="nn">django.core.validators</span> <span class="kn">import</span> <span class="n">EMPTY_VALUES</span>
<span class="kn">from</span> <span class="nn">.widgets</span> <span class="kn">import</span> <span class="n">Select2Widget</span><span class="p">,</span> <span class="n">Select2MultipleWidget</span><span class="p">,</span>\
<span class="n">HeavySelect2Widget</span><span class="p">,</span> <span class="n">HeavySelect2MultipleWidget</span><span class="p">,</span> <span class="n">AutoHeavySelect2Widget</span><span class="p">,</span> \
<span class="n">AutoHeavySelect2MultipleWidget</span>
<span class="kn">from</span> <span class="nn">.views</span> <span class="kn">import</span> <span class="n">NO_ERR_RESP</span>
<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">extract_some_key_val</span>
<span class="c">### Light general fields ###</span>
<div class="viewcode-block" id="Select2ChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.Select2ChoiceField">[docs]</a><span class="k">class</span> <span class="nc">Select2ChoiceField</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">ChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Drop-in Select2 replacement for :py:class:`forms.ChoiceField`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">Select2Widget</span>
</div>
<div class="viewcode-block" id="Select2MultipleChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.Select2MultipleChoiceField">[docs]</a><span class="k">class</span> <span class="nc">Select2MultipleChoiceField</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">MultipleChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Drop-in Select2 replacement for :py:class:`forms.MultipleChoiceField`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">Select2MultipleWidget</span>
<span class="c">### Model fields related mixins ###</span>
</div>
<div class="viewcode-block" id="ModelResultJsonMixin"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelResultJsonMixin">[docs]</a><span class="k">class</span> <span class="nc">ModelResultJsonMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Makes ``heavy_data.js`` parsable JSON response for queries on its model.</span>
<span class="sd"> On query it uses :py:meth:`.prepare_qs_params` to prepare query attributes</span>
<span class="sd"> which it then passes to ``self.queryset.filter()`` to get the results.</span>
<span class="sd"> It is expected that sub-classes will defined a class field variable</span>
<span class="sd"> ``search_fields``, which should be a list of field names to search for.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="ModelResultJsonMixin.__init__"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelResultJsonMixin.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Class constructor.</span>
<span class="sd"> :param queryset: This can be passed as kwarg here or defined as field variabel,</span>
<span class="sd"> like ``search_fields``.</span>
<span class="sd"> :type queryset: :py:class:`django.db.models.query.QuerySet` or None</span>
<span class="sd"> :param max_results: Maximum number to results to return per Ajax query.</span>
<span class="sd"> :type max_results: :py:obj:`int`</span>
<span class="sd"> :param to_field_name: Which field&#39;s value should be returned as result tuple&#39;s</span>
<span class="sd"> value. (Default is ``pk``, i.e. the id field of the model)</span>
<span class="sd"> :type to_field_name: :py:obj:`str`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">queryset</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">has_key</span><span class="p">(</span><span class="s">&#39;queryset&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;queryset is required.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_fields</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;search_fields is required.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">max_results</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;max_results&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;to_field_name&#39;</span><span class="p">,</span> <span class="s">&#39;pk&#39;</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ModelResultJsonMixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="ModelResultJsonMixin.label_from_instance"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelResultJsonMixin.label_from_instance">[docs]</a> <span class="k">def</span> <span class="nf">label_from_instance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sub-classes should override this to generate custom label texts for values.</span>
<span class="sd"> :param obj: The model object.</span>
<span class="sd"> :type obj: :py:class:`django.model.Model`</span>
<span class="sd"> :return: The label string.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">smart_unicode</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="ModelResultJsonMixin.prepare_qs_params"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelResultJsonMixin.prepare_qs_params">[docs]</a> <span class="k">def</span> <span class="nf">prepare_qs_params</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">search_term</span><span class="p">,</span> <span class="n">search_fields</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Prepares queryset parameter to use for searching.</span>
<span class="sd"> :param search_term: The search term.</span>
<span class="sd"> :type search_term: :py:obj:`str`</span>
<span class="sd"> :param search_fields: The list of search fields. This is same as ``self.search_fields``.</span>
<span class="sd"> :type search_term: :py:obj:`list`</span>
<span class="sd"> :return: A dictionary of parameters to &#39;or&#39; and &#39;and&#39; together. The output format should</span>
<span class="sd"> be ::</span>
<span class="sd"> {</span>
<span class="sd"> &#39;or&#39;: [</span>
<span class="sd"> Q(attr11=term11) | Q(attr12=term12) | ...,</span>
<span class="sd"> Q(attrN1=termN1) | Q(attrN2=termN2) | ...,</span>
<span class="sd"> ...],</span>
<span class="sd"> &#39;and&#39;: {</span>
<span class="sd"> &#39;attrX1&#39;: termX1,</span>
<span class="sd"> &#39;attrX2&#39;: termX2,</span>
<span class="sd"> ...</span>
<span class="sd"> }</span>
<span class="sd"> }</span>
<span class="sd"> The above would then be coaxed into ``filter()`` as below::</span>
<span class="sd"> queryset.filter(</span>
<span class="sd"> Q(attr11=term11) | Q(attr12=term12) | ...,</span>
<span class="sd"> Q(attrN1=termN1) | Q(attrN2=termN2) | ...,</span>
<span class="sd"> ...,</span>
<span class="sd"> attrX1=termX1,</span>
<span class="sd"> attrX2=termX2,</span>
<span class="sd"> ...</span>
<span class="sd"> )</span>
<span class="sd"> In this implementation, ``term11, term12, termN1, ...`` etc., all are actually ``search_term``.</span>
<span class="sd"> Also then ``and`` part is always empty.</span>
<span class="sd"> So, let&#39;s take an example.</span>
<span class="sd"> | Assume, ``search_term == &#39;John&#39;``</span>
<span class="sd"> | ``self.search_fields == [&#39;first_name__icontains&#39;, &#39;last_name__icontains&#39;]``</span>
<span class="sd"> </span>
<span class="sd"> So, the prepared query would be::</span>
<span class="sd"> {</span>
<span class="sd"> &#39;or&#39;: [</span>
<span class="sd"> Q(first_name__icontains=search_term) | Q(last_name__icontains=search_term)</span>
<span class="sd"> ],</span>
<span class="sd"> &#39;and&#39;: {}</span>
<span class="sd"> }</span>
<span class="sd"> :rtype: :py:obj:`dict`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">q</span> <span class="o">=</span> <span class="bp">None</span>
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">search_fields</span><span class="p">:</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">kwargs</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> <span class="o">=</span> <span class="n">search_term</span>
<span class="k">if</span> <span class="n">q</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">q</span> <span class="o">=</span> <span class="n">q</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span><span class="s">&#39;or&#39;</span><span class="p">:</span> <span class="p">[</span><span class="n">q</span><span class="p">],</span> <span class="s">&#39;and&#39;</span><span class="p">:</span> <span class="p">{},}</span>
</div>
<div class="viewcode-block" id="ModelResultJsonMixin.get_results"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelResultJsonMixin.get_results">[docs]</a> <span class="k">def</span> <span class="nf">get_results</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> See :py:meth:`.views.Select2View.get_results`.</span>
<span class="sd"> This implementation takes care of detecting if more results are available.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">qs</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">queryset</span><span class="p">)</span>
<span class="n">params</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prepare_qs_params</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_fields</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_results</span><span class="p">:</span>
<span class="n">min_</span> <span class="o">=</span> <span class="p">(</span><span class="n">page</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_results</span>
<span class="n">max_</span> <span class="o">=</span> <span class="n">min_</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_results</span> <span class="o">+</span> <span class="mi">1</span> <span class="c"># fetching one extra row to check if it has more rows.</span>
<span class="n">res</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">qs</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o">*</span><span class="n">params</span><span class="p">[</span><span class="s">&#39;or&#39;</span><span class="p">],</span> <span class="o">**</span><span class="n">params</span><span class="p">[</span><span class="s">&#39;and&#39;</span><span class="p">])[</span><span class="n">min_</span><span class="p">:</span><span class="n">max_</span><span class="p">])</span>
<span class="n">has_more</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">res</span><span class="p">)</span> <span class="o">==</span> <span class="p">(</span><span class="n">max_</span> <span class="o">-</span> <span class="n">min_</span><span class="p">)</span>
<span class="k">if</span> <span class="n">has_more</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="n">res</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">res</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">qs</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="o">*</span><span class="n">params</span><span class="p">[</span><span class="s">&#39;or&#39;</span><span class="p">],</span> <span class="o">**</span><span class="n">params</span><span class="p">[</span><span class="s">&#39;and&#39;</span><span class="p">]))</span>
<span class="n">has_more</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[</span> <span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_field_name</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">label_from_instance</span><span class="p">(</span><span class="n">obj</span><span class="p">),</span> <span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">res</span> <span class="p">]</span>
<span class="k">return</span> <span class="p">(</span><span class="n">NO_ERR_RESP</span><span class="p">,</span> <span class="n">has_more</span><span class="p">,</span> <span class="n">res</span><span class="p">,</span> <span class="p">)</span>
</div></div>
<div class="viewcode-block" id="UnhideableQuerysetType"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.UnhideableQuerysetType">[docs]</a><span class="k">class</span> <span class="nc">UnhideableQuerysetType</span><span class="p">(</span><span class="nb">type</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This does some pretty nasty hacky stuff, to make sure users can</span>
<span class="sd"> also define ``queryset`` as class-level field variable, instead of</span>
<span class="sd"> passing it to constructor.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># TODO check for alternatives. Maybe this hack is not necessary.</span>
<span class="k">def</span> <span class="nf">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">):</span>
<span class="n">_q</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;queryset&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_q</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">_q</span><span class="p">,</span> <span class="nb">property</span><span class="p">):</span>
<span class="c"># This hack is needed since users are allowed to</span>
<span class="c"># provide queryset in sub-classes by declaring</span>
<span class="c"># class variable named - queryset, which will</span>
<span class="c"># effectively hide the queryset declared in this</span>
<span class="c"># mixin.</span>
<span class="n">dct</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;queryset&#39;</span><span class="p">)</span> <span class="c"># Throwing away the sub-class queryset</span>
<span class="n">dct</span><span class="p">[</span><span class="s">&#39;_subclass_queryset&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">_q</span>
<span class="k">return</span> <span class="nb">type</span><span class="o">.</span><span class="n">__new__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">dct</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">__call__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">queryset</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;queryset&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">queryset</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="s">&#39;_subclass_queryset&#39;</span><span class="p">):</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;queryset&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="s">&#39;_subclass_queryset&#39;</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">type</span><span class="o">.</span><span class="n">__call__</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="ChoiceMixin"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ChoiceMixin">[docs]</a><span class="k">class</span> <span class="nc">ChoiceMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Simple mixin which provides a property -- ``choices``. When ``choices`` is set,</span>
<span class="sd"> then it sets that value to ``self.widget.choices`` too.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_get_choices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_choices&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices</span>
<span class="k">def</span> <span class="nf">_set_choices</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="c"># Setting choices also sets the choices on the widget.</span>
<span class="c"># choices can be any iterable, but we call list() on it because</span>
<span class="c"># it will be consumed more than once.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">choices</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_choices</span><span class="p">,</span> <span class="n">_set_choices</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="QuerysetChoiceMixin"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.QuerysetChoiceMixin">[docs]</a><span class="k">class</span> <span class="nc">QuerysetChoiceMixin</span><span class="p">(</span><span class="n">ChoiceMixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Overrides ``choices``&#39; getter to return instance of :py:class:`.ModelChoiceIterator`</span>
<span class="sd"> instead.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_get_choices</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c"># If self._choices is set, then somebody must have manually set</span>
<span class="c"># the property self.choices. In this case, just return self._choices.</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_choices&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices</span>
<span class="c"># Otherwise, execute the QuerySet in self.queryset to determine the</span>
<span class="c"># choices dynamically. Return a fresh ModelChoiceIterator that has not been</span>
<span class="c"># consumed. Note that we&#39;re instantiating a new ModelChoiceIterator *each*</span>
<span class="c"># time _get_choices() is called (and, thus, each time self.choices is</span>
<span class="c"># accessed) so that we can ensure the QuerySet has not been consumed. This</span>
<span class="c"># construct might look complicated but it allows for lazy evaluation of</span>
<span class="c"># the queryset.</span>
<span class="k">return</span> <span class="n">ModelChoiceIterator</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">choices</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">_get_choices</span><span class="p">,</span> <span class="n">ChoiceMixin</span><span class="o">.</span><span class="n">_set_choices</span><span class="p">)</span>
</div>
<span class="k">class</span> <span class="nc">ModelChoiceFieldMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">queryset</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;queryset&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="n">kargs</span> <span class="o">=</span> <span class="n">extract_some_key_val</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="p">[</span>
<span class="s">&#39;empty_label&#39;</span><span class="p">,</span> <span class="s">&#39;cache_choices&#39;</span><span class="p">,</span> <span class="s">&#39;required&#39;</span><span class="p">,</span> <span class="s">&#39;label&#39;</span><span class="p">,</span> <span class="s">&#39;initial&#39;</span><span class="p">,</span> <span class="s">&#39;help_text&#39;</span><span class="p">,</span>
<span class="p">])</span>
<span class="n">kargs</span><span class="p">[</span><span class="s">&#39;widget&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;widget&#39;</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;widget&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span>
<span class="n">kargs</span><span class="p">[</span><span class="s">&#39;to_field_name&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;to_field_name&#39;</span><span class="p">,</span> <span class="s">&#39;pk&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_choices&#39;</span><span class="p">):</span> <span class="c"># If it exists then probably it is set by HeavySelect2FieldBase.</span>
<span class="c"># We are not gonna use that anyway.</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_choices</span>
<span class="nb">super</span><span class="p">(</span><span class="n">ModelChoiceFieldMixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="n">queryset</span><span class="p">,</span> <span class="o">**</span><span class="n">kargs</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;set_placeholder&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">set_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">empty_label</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_queryset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;_queryset&#39;</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_queryset</span>
<span class="c">### Slightly altered versions of the Django counterparts with the same name in forms module. ###</span>
<span class="k">class</span> <span class="nc">ModelChoiceField</span><span class="p">(</span><span class="n">ModelChoiceFieldMixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">ModelChoiceField</span><span class="p">):</span>
<span class="n">queryset</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">ModelChoiceFieldMixin</span><span class="o">.</span><span class="n">_get_queryset</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">ModelChoiceField</span><span class="o">.</span><span class="n">_set_queryset</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">ModelMultipleChoiceField</span><span class="p">(</span><span class="n">ModelChoiceFieldMixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">ModelMultipleChoiceField</span><span class="p">):</span>
<span class="n">queryset</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">ModelChoiceFieldMixin</span><span class="o">.</span><span class="n">_get_queryset</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">ModelMultipleChoiceField</span><span class="o">.</span><span class="n">_set_queryset</span><span class="p">)</span>
<span class="c">### Light Fileds specialized for Models ###</span>
<div class="viewcode-block" id="ModelSelect2Field"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelSelect2Field">[docs]</a><span class="k">class</span> <span class="nc">ModelSelect2Field</span><span class="p">(</span><span class="n">ModelChoiceField</span><span class="p">)</span> <span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Light Select2 field, specialized for Models.</span>
<span class="sd"> Select2 replacement for :py:class:`forms.ModelChoiceField`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">Select2Widget</span>
</div>
<div class="viewcode-block" id="ModelSelect2MultipleField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.ModelSelect2MultipleField">[docs]</a><span class="k">class</span> <span class="nc">ModelSelect2MultipleField</span><span class="p">(</span><span class="n">ModelMultipleChoiceField</span><span class="p">)</span> <span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Light multiple-value Select2 field, specialized for Models.</span>
<span class="sd"> Select2 replacement for :py:class:`forms.ModelMultipleChoiceField`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">Select2MultipleWidget</span>
<span class="c">### Heavy fields ###</span>
</div>
<div class="viewcode-block" id="HeavySelect2FieldBase"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavySelect2FieldBase">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2FieldBase</span><span class="p">(</span><span class="n">ChoiceMixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">Field</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base field for all Heavy fields.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="HeavySelect2FieldBase.__init__"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavySelect2FieldBase.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Class constructor.</span>
<span class="sd"> :param data_view: A :py:class:`~.views.Select2View` sub-class which can respond to this widget&#39;s Ajax queries.</span>
<span class="sd"> :type data_view: :py:class:`django.views.generic.View` or None</span>
<span class="sd"> :param widget: A widget instance.</span>
<span class="sd"> :type widget: :py:class:`django.forms.widgets.Widget` or None</span>
<span class="sd"> .. warning:: Either of ``data_view`` or ``widget`` must be specified, else :py:exc:`ValueError` would</span>
<span class="sd"> be raised.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data_view</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;data_view&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="n">choices</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;choices&#39;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">kargs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">data_view</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">kargs</span><span class="p">[</span><span class="s">&#39;widget&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="p">(</span><span class="n">data_view</span><span class="o">=</span><span class="n">data_view</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;widget&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;data_view is required else you need to provide your own widget instance.&#39;</span><span class="p">)</span>
<span class="n">kargs</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HeavySelect2FieldBase</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kargs</span><span class="p">)</span>
<span class="c"># By this time self.widget would have been instantiated.</span>
<span class="c"># This piece of code is needed here since (God knows why) Django&#39;s Field class does not call</span>
<span class="c"># super(); because of that __init__() of classes would get called after Field.__init__().</span>
<span class="c"># If did had super() call there then we could have simply moved AutoViewFieldMixin at the</span>
<span class="c"># end of the MRO list. This way it would have got widget instance instead of class and it</span>
<span class="c"># could have directly set field_id on it.</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;field_id&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">widget</span><span class="o">.</span><span class="n">field_id</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">field_id</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">choices</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s">&#39;choices&#39;</span><span class="p">):</span> <span class="c"># ModelChoiceField will set this to ModelChoiceIterator</span>
<span class="n">choices</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">choices</span>
<span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">choices</span>
</div></div>
<div class="viewcode-block" id="HeavySelect2ChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavySelect2ChoiceField">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2ChoiceField</span><span class="p">(</span><span class="n">HeavySelect2FieldBase</span><span class="p">):</span>
<span class="s">&quot;Heavy Select2 Choice field.&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">HeavySelect2Widget</span>
</div>
<div class="viewcode-block" id="HeavySelect2MultipleChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavySelect2MultipleChoiceField">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2MultipleChoiceField</span><span class="p">(</span><span class="n">HeavySelect2FieldBase</span><span class="p">):</span>
<span class="s">&quot;Heavy Select2 Multiple Choice field.&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">HeavySelect2MultipleWidget</span>
<span class="c">### Heavy field specialized for Models ###</span>
</div>
<div class="viewcode-block" id="HeavyModelSelect2ChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavyModelSelect2ChoiceField">[docs]</a><span class="k">class</span> <span class="nc">HeavyModelSelect2ChoiceField</span><span class="p">(</span><span class="n">QuerysetChoiceMixin</span><span class="p">,</span> <span class="n">HeavySelect2ChoiceField</span><span class="p">,</span> <span class="n">ModelChoiceField</span><span class="p">):</span>
<span class="s">&quot;Heavy Select2 Choice field, specialized for Models.&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;choices&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HeavyModelSelect2ChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="HeavyModelSelect2MultipleChoiceField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.HeavyModelSelect2MultipleChoiceField">[docs]</a><span class="k">class</span> <span class="nc">HeavyModelSelect2MultipleChoiceField</span><span class="p">(</span><span class="n">QuerysetChoiceMixin</span><span class="p">,</span> <span class="n">HeavySelect2MultipleChoiceField</span><span class="p">,</span> <span class="n">ModelMultipleChoiceField</span><span class="p">):</span>
<span class="s">&quot;Heavy Select2 Multiple Choice field, specialized for Models.&quot;</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;choices&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HeavyModelSelect2MultipleChoiceField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="c">### Heavy general field that uses central AutoView ###</span>
</div>
<div class="viewcode-block" id="AutoSelect2Field"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoSelect2Field">[docs]</a><span class="k">class</span> <span class="nc">AutoSelect2Field</span><span class="p">(</span><span class="n">AutoViewFieldMixin</span><span class="p">,</span> <span class="n">HeavySelect2ChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Auto Heavy Select2 field.</span>
<span class="sd"> This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming</span>
<span class="sd"> json query requests for that type (class).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">AutoHeavySelect2Widget</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_view</span> <span class="o">=</span> <span class="s">&quot;django_select2_central_json&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_view</span>
<span class="nb">super</span><span class="p">(</span><span class="n">AutoSelect2Field</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="AutoSelect2MultipleField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoSelect2MultipleField">[docs]</a><span class="k">class</span> <span class="nc">AutoSelect2MultipleField</span><span class="p">(</span><span class="n">AutoViewFieldMixin</span><span class="p">,</span> <span class="n">HeavySelect2MultipleChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Auto Heavy Select2 field for multiple choices.</span>
<span class="sd"> This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming</span>
<span class="sd"> json query requests for that type (class).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">AutoHeavySelect2MultipleWidget</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_view</span> <span class="o">=</span> <span class="s">&quot;django_select2_central_json&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_view</span>
<span class="nb">super</span><span class="p">(</span><span class="n">AutoSelect2MultipleField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="c">### Heavy field, specialized for Model, that uses central AutoView ###</span>
</div>
<div class="viewcode-block" id="AutoModelSelect2Field"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoModelSelect2Field">[docs]</a><span class="k">class</span> <span class="nc">AutoModelSelect2Field</span><span class="p">(</span><span class="n">ModelResultJsonMixin</span><span class="p">,</span> <span class="n">AutoViewFieldMixin</span><span class="p">,</span> <span class="n">HeavyModelSelect2ChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Auto Heavy Select2 field, specialized for Models.</span>
<span class="sd"> This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming</span>
<span class="sd"> json query requests for that type (class).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">UnhideableQuerysetType</span> <span class="c"># Makes sure that user defined queryset class variable is replaced by</span>
<span class="c"># queryset property (as it is needed by super classes).</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">AutoHeavySelect2Widget</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_view</span> <span class="o">=</span> <span class="s">&quot;django_select2_central_json&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_view</span>
<span class="nb">super</span><span class="p">(</span><span class="n">AutoModelSelect2Field</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="AutoModelSelect2MultipleField"><a class="viewcode-back" href="../../ref_fields.html#django_select2.fields.AutoModelSelect2MultipleField">[docs]</a><span class="k">class</span> <span class="nc">AutoModelSelect2MultipleField</span><span class="p">(</span><span class="n">ModelResultJsonMixin</span><span class="p">,</span> <span class="n">AutoViewFieldMixin</span><span class="p">,</span> <span class="n">HeavyModelSelect2MultipleChoiceField</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Auto Heavy Select2 field for multiple choices, specialized for Models.</span>
<span class="sd"> This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming</span>
<span class="sd"> json query requests for that type (class).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">__metaclass__</span> <span class="o">=</span> <span class="n">UnhideableQuerysetType</span> <span class="c"># Makes sure that user defined queryset class variable is replaced by</span>
<span class="c"># queryset property (as it is needed by super classes).</span>
<span class="n">widget</span> <span class="o">=</span> <span class="n">AutoHeavySelect2MultipleWidget</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_view</span> <span class="o">=</span> <span class="s">&quot;django_select2_central_json&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s">&#39;data_view&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data_view</span>
<span class="nb">super</span><span class="p">(</span><span class="n">AutoModelSelect2MultipleField</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</pre></div></div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, Nirupam Biswas.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View file

@ -0,0 +1,352 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>django_select2.util &mdash; Django-Select2 3.0 documentation</title>
<link rel="stylesheet" href="../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '3.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="Django-Select2 3.0 documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for django_select2.util</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">types</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">from</span> <span class="nn">django.utils.html</span> <span class="kn">import</span> <span class="n">escape</span>
<span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="kn">import</span> <span class="n">force_unicode</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<div class="viewcode-block" id="JSVar"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.JSVar">[docs]</a><span class="k">class</span> <span class="nc">JSVar</span><span class="p">(</span><span class="nb">unicode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A JS variable.</span>
<span class="sd"> This is a simple unicode string. This class type acts as a marker that this string is a JS variable name,</span>
<span class="sd"> so it must not be quoted by :py:func:`.convert_py_to_js_data` while rendering the JS code.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="JSFunction"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.JSFunction">[docs]</a><span class="k">class</span> <span class="nc">JSFunction</span><span class="p">(</span><span class="n">JSVar</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A JS function name.</span>
<span class="sd"> From rendering point of view, rendering this is no different from :py:class:`JSVar`. After all, a JS varible</span>
<span class="sd"> can refer a function instance, primitive constant or any other object. They are still all varibles.</span>
<span class="sd"> .. tip:: Do use this marker for JS functions. This will make the code clearer, and the purpose more easier to</span>
<span class="sd"> understand.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="JSFunctionInContext"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.JSFunctionInContext">[docs]</a><span class="k">class</span> <span class="nc">JSFunctionInContext</span><span class="p">(</span><span class="n">JSVar</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A JS function name to run in context of some other Html DOM element.</span>
<span class="sd"> Like :py:class:JSFunction`, this too flags the string as JS function, but with a special requirement. The JS function</span>
<span class="sd"> needs to be invoked in the context of a Html DOM, such that, ``this`` inside the function refers to that DOM instead of</span>
<span class="sd"> ``window``.</span>
<span class="sd"> .. tip:: JS functions of this type are warapped inside special another JS function -- ``django_select2.runInContextHelper``.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="render_js_script"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.render_js_script">[docs]</a><span class="k">def</span> <span class="nf">render_js_script</span><span class="p">(</span><span class="n">inner_code</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This wraps ``inner_code`` string inside the following code block::</span>
<span class="sd"> &lt;script&gt;</span>
<span class="sd"> $(function () {</span>
<span class="sd"> // inner_code here</span>
<span class="sd"> });</span>
<span class="sd"> &lt;/script&gt;</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s">u&quot;&quot;&quot;</span>
<span class="s"> &lt;script&gt;</span>
<span class="s"> $(function () {</span>
<span class="s"> </span><span class="si">%s</span><span class="s"></span>
<span class="s"> });</span>
<span class="s"> &lt;/script&gt;&quot;&quot;&quot;</span> <span class="o">%</span> <span class="n">inner_code</span>
</div>
<div class="viewcode-block" id="extract_some_key_val"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.extract_some_key_val">[docs]</a><span class="k">def</span> <span class="nf">extract_some_key_val</span><span class="p">(</span><span class="n">dct</span><span class="p">,</span> <span class="n">keys</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Gets a sub-set of a :py:obj:`dict`.</span>
<span class="sd"> :param dct: Source dictionary.</span>
<span class="sd"> :type dct: :py:obj:`dict`</span>
<span class="sd"> :param keys: List of subset keys, which to extract from ``dct``.</span>
<span class="sd"> :type keys: :py:obj:`list` or any iterable.</span>
<span class="sd"> :rtype: :py:obj:`dict`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">edct</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">v</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">edct</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span>
<span class="k">return</span> <span class="n">edct</span>
</div>
<div class="viewcode-block" id="convert_py_to_js_data"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.convert_py_to_js_data">[docs]</a><span class="k">def</span> <span class="nf">convert_py_to_js_data</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">id_</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts Python data type to JS data type.</span>
<span class="sd"> Practically what this means is, convert ``False`` to ``false``, ``True`` to ``true`` and so on.</span>
<span class="sd"> It also takes care of the conversion of :py:class:`.JSVar`, :py:class:`.JSFunction`</span>
<span class="sd"> and :py:class:`.JSFunctionInContext`. It takes care of recursively converting lists and dictionaries</span>
<span class="sd"> too.</span>
<span class="sd"> :param val: The Python data to convert.</span>
<span class="sd"> :type val: Any</span>
<span class="sd"> :param id_: The DOM id of the element in which context :py:class:`.JSFunctionInContext` functions</span>
<span class="sd"> should run. (This is not needed if ``val`` contains no :py:class:`.JSFunctionInContext`)</span>
<span class="sd"> :type id_: :py:obj:`str`</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="o">==</span> <span class="n">types</span><span class="o">.</span><span class="n">BooleanType</span><span class="p">:</span>
<span class="k">return</span> <span class="s">u&#39;true&#39;</span> <span class="k">if</span> <span class="n">val</span> <span class="k">else</span> <span class="s">u&#39;false&#39;</span>
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="ow">in</span> <span class="p">[</span><span class="n">types</span><span class="o">.</span><span class="n">IntType</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">LongType</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">FloatType</span><span class="p">]:</span>
<span class="k">return</span> <span class="n">force_unicode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">JSFunctionInContext</span><span class="p">):</span>
<span class="k">return</span> <span class="s">u&quot;django_select2.runInContextHelper(</span><span class="si">%s</span><span class="s">, &#39;</span><span class="si">%s</span><span class="s">&#39;)&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">JSVar</span><span class="p">):</span>
<span class="k">return</span> <span class="n">val</span> <span class="c"># No quotes here</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">return</span> <span class="n">convert_dict_to_js_map</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span>
<span class="k">return</span> <span class="n">convert_to_js_arr</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s">u&quot;&#39;</span><span class="si">%s</span><span class="s">&#39;&quot;</span> <span class="o">%</span> <span class="n">force_unicode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="convert_dict_to_js_map"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.convert_dict_to_js_map">[docs]</a><span class="k">def</span> <span class="nf">convert_dict_to_js_map</span><span class="p">(</span><span class="n">dct</span><span class="p">,</span> <span class="n">id_</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts a Python dictionary to JS map.</span>
<span class="sd"> :param dct: The Python dictionary to convert.</span>
<span class="sd"> :type dct: :py:obj:`dict`</span>
<span class="sd"> :param id_: The DOM id of the element in which context :py:class:`.JSFunctionInContext` functions</span>
<span class="sd"> should run. (This is not needed if ``dct`` contains no :py:class:`.JSFunctionInContext`)</span>
<span class="sd"> :type id_: :py:obj:`str`</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">u&#39;{&#39;</span>
<span class="n">is_first</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">dct</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_first</span><span class="p">:</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">u&quot;, &quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">is_first</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">u&quot;&#39;</span><span class="si">%s</span><span class="s">&#39;: &quot;</span> <span class="o">%</span> <span class="n">name</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">convert_py_to_js_data</span><span class="p">(</span><span class="n">dct</span><span class="p">[</span><span class="n">name</span><span class="p">],</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span> <span class="o">+</span> <span class="s">u&#39;}&#39;</span>
</div>
<div class="viewcode-block" id="convert_to_js_arr"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.convert_to_js_arr">[docs]</a><span class="k">def</span> <span class="nf">convert_to_js_arr</span><span class="p">(</span><span class="n">lst</span><span class="p">,</span> <span class="n">id_</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts a Python list (or any iterable) to JS array.</span>
<span class="sd"> :param lst: The Python iterable to convert.</span>
<span class="sd"> :type lst: :py:obj:`list` or Any iterable</span>
<span class="sd"> :param id_: The DOM id of the element in which context :py:class:`.JSFunctionInContext` functions</span>
<span class="sd"> should run. (This is not needed if ``lst`` contains no :py:class:`.JSFunctionInContext`)</span>
<span class="sd"> :type id_: :py:obj:`str`</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">out</span> <span class="o">=</span> <span class="s">u&#39;[&#39;</span>
<span class="n">is_first</span> <span class="o">=</span> <span class="bp">True</span>
<span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_first</span><span class="p">:</span>
<span class="n">out</span> <span class="o">+=</span> <span class="s">u&quot;, &quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">is_first</span> <span class="o">=</span> <span class="bp">False</span>
<span class="n">out</span> <span class="o">+=</span> <span class="n">convert_py_to_js_data</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">return</span> <span class="n">out</span> <span class="o">+</span> <span class="s">u&#39;]&#39;</span>
</div>
<div class="viewcode-block" id="convert_to_js_string_arr"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.convert_to_js_string_arr">[docs]</a><span class="k">def</span> <span class="nf">convert_to_js_string_arr</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Converts a Python list (or any iterable) of strings to JS array.</span>
<span class="sd"> :py:func:`convert_to_js_arr` can always be used instead of this. However, since it</span>
<span class="sd"> knows that it only contains strings, it cuts down on unnecessary computations.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">lst</span> <span class="o">=</span> <span class="p">[</span><span class="s">u&#39;&quot;</span><span class="si">%s</span><span class="s">&quot;&#39;</span> <span class="o">%</span> <span class="n">force_unicode</span><span class="p">(</span><span class="n">l</span><span class="p">)</span> <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">]</span>
<span class="k">return</span> <span class="s">u&quot;[</span><span class="si">%s</span><span class="s">]&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="s">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lst</span><span class="p">))</span>
<span class="c">### Auto view helper utils ###</span>
</div>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">import</span> <span class="nn">threading</span>
<span class="kn">import</span> <span class="nn">datetime</span>
<div class="viewcode-block" id="synchronized"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.synchronized">[docs]</a><span class="k">def</span> <span class="nf">synchronized</span><span class="p">(</span><span class="n">f</span><span class="p">):</span>
<span class="s">&quot;Decorator to synchronize multiple calls to a functions.&quot;</span>
<span class="n">f</span><span class="o">.</span><span class="n">__lock__</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">synced_f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">with</span> <span class="n">f</span><span class="o">.</span><span class="n">__lock__</span><span class="p">:</span>
<span class="k">return</span> <span class="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">synced_f</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">__doc__</span>
<span class="k">return</span> <span class="n">synced_f</span>
</div>
<span class="n">__id_store</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Generated Id to field instance mapping.</span>
<span class="n">__field_store</span> <span class="o">=</span> <span class="p">{}</span> <span class="c"># Field&#39;s key to generated Id mapping.</span>
<span class="n">ID_PATTERN</span> <span class="o">=</span> <span class="s">r&quot;[0-9_a-zA-Z.:+\- ]+&quot;</span>
<div class="viewcode-block" id="is_valid_id"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.is_valid_id">[docs]</a><span class="k">def</span> <span class="nf">is_valid_id</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Checks if ``val`` is a valid generated Id.</span>
<span class="sd"> :param val: The value to check.</span>
<span class="sd"> :type val: :py:obj:`str`</span>
<span class="sd"> :rtype: :py:obj:`bool`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">regex</span> <span class="o">=</span> <span class="s">&quot;^</span><span class="si">%s</span><span class="s">$&quot;</span> <span class="o">%</span> <span class="n">ID_PATTERN</span>
<span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">regex</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">True</span>
</div>
<span class="nd">@synchronized</span>
<div class="viewcode-block" id="register_field"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.register_field">[docs]</a><span class="k">def</span> <span class="nf">register_field</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">field</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Registers an Auto field for use with :py:class:`.views.AutoResponseView`.</span>
<span class="sd"> :param key: The key to use while registering this field.</span>
<span class="sd"> :type key: :py:obj:`unicode`</span>
<span class="sd"> :param field: The field to register.</span>
<span class="sd"> :type field: :py:class:`AutoViewFieldMixin`</span>
<span class="sd"> :return: The generated Id for this field. If given ``key`` was already registered then the</span>
<span class="sd"> Id generated that time, would be returned.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">global</span> <span class="n">__id_store</span><span class="p">,</span> <span class="n">__field_store</span>
<span class="kn">from</span> <span class="nn">fields</span> <span class="kn">import</span> <span class="n">AutoViewFieldMixin</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">field</span><span class="p">,</span> <span class="n">AutoViewFieldMixin</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;Field must extend AutoViewFieldMixin&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">__field_store</span><span class="p">:</span>
<span class="c"># Generating id</span>
<span class="n">id_</span> <span class="o">=</span> <span class="s">u&quot;</span><span class="si">%d</span><span class="s">:</span><span class="si">%s</span><span class="s">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">__id_store</span><span class="p">),</span> <span class="nb">unicode</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()))</span>
<span class="n">__field_store</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">id_</span>
<span class="n">__id_store</span><span class="p">[</span><span class="n">id_</span><span class="p">]</span> <span class="o">=</span> <span class="n">field</span>
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Registering new field: </span><span class="si">%s</span><span class="s">; With actual id: </span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">id_</span> <span class="o">=</span> <span class="n">__field_store</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s">&quot;Field already registered: </span><span class="si">%s</span><span class="s">; With actual id: </span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">return</span> <span class="n">id_</span>
</div>
<div class="viewcode-block" id="get_field"><a class="viewcode-back" href="../../ref_util.html#django_select2.util.get_field">[docs]</a><span class="k">def</span> <span class="nf">get_field</span><span class="p">(</span><span class="n">id_</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns an Auto field instance registered with the given Id.</span>
<span class="sd"> :param id_: The generated Id the field is registered with.</span>
<span class="sd"> :type id_: :py:obj:`unicode`</span>
<span class="sd"> :rtype: :py:class:`AutoViewFieldMixin` or None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">__id_store</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
</pre></div></div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, Nirupam Biswas.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View file

@ -0,0 +1,282 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>django_select2.views &mdash; Django-Select2 3.0 documentation</title>
<link rel="stylesheet" href="../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '3.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="Django-Select2 3.0 documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for django_select2.views</h1><div class="highlight"><pre>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="n">HttpResponse</span>
<span class="kn">from</span> <span class="nn">django.views.generic</span> <span class="kn">import</span> <span class="n">View</span>
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">PermissionDenied</span>
<span class="kn">from</span> <span class="nn">django.http</span> <span class="kn">import</span> <span class="n">Http404</span>
<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">get_field</span><span class="p">,</span> <span class="n">is_valid_id</span>
<span class="n">NO_ERR_RESP</span> <span class="o">=</span> <span class="s">&#39;nil&#39;</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Equals to &#39;nil&#39; constant.</span>
<span class="sd">Use this in :py:meth:`.Select2View.get_results` to mean no error, instead of hardcoding &#39;nil&#39; value.</span>
<span class="sd">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="JSONResponseMixin"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.JSONResponseMixin">[docs]</a><span class="k">class</span> <span class="nc">JSONResponseMixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A mixin that can be used to render a JSON response.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">response_class</span> <span class="o">=</span> <span class="n">HttpResponse</span>
<div class="viewcode-block" id="JSONResponseMixin.render_to_response"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.JSONResponseMixin.render_to_response">[docs]</a> <span class="k">def</span> <span class="nf">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">,</span> <span class="o">**</span><span class="n">response_kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a JSON response, transforming &#39;context&#39; to make the payload.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">response_kwargs</span><span class="p">[</span><span class="s">&#39;content_type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s">&#39;application/json&#39;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">response_class</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">convert_context_to_json</span><span class="p">(</span><span class="n">context</span><span class="p">),</span>
<span class="o">**</span><span class="n">response_kwargs</span>
<span class="p">)</span>
</div>
<div class="viewcode-block" id="JSONResponseMixin.convert_context_to_json"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.JSONResponseMixin.convert_context_to_json">[docs]</a> <span class="k">def</span> <span class="nf">convert_context_to_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="s">&quot;Convert the context dictionary into a JSON object&quot;</span>
<span class="k">return</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">context</span><span class="p">)</span>
</div></div>
<div class="viewcode-block" id="Select2View"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.Select2View">[docs]</a><span class="k">class</span> <span class="nc">Select2View</span><span class="p">(</span><span class="n">JSONResponseMixin</span><span class="p">,</span> <span class="n">View</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base view which is designed to respond with JSON to Ajax queries from heavy widgets/fields.</span>
<span class="sd"> Although the widgets won&#39;t enforce the type of data_view it gets, but it is recommended to</span>
<span class="sd"> sub-class this view instead of creating a Django view from scratch.</span>
<span class="sd"> .. note:: Only `GET &lt;http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3&gt;`_ Http requests are supported.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">dispatch</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_all_permissions</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">e</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">respond_with_exception</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Select2View</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">dispatch</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s">&#39;GET&#39;</span><span class="p">:</span>
<span class="n">term</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;term&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">term</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">((</span><span class="s">&#39;missing term&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">,</span> <span class="p">[],</span> <span class="p">)))</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">term</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">((</span><span class="n">NO_ERR_RESP</span><span class="p">,</span> <span class="bp">False</span><span class="p">,</span> <span class="p">[],</span> <span class="p">)))</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">page</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;page&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">))</span>
<span class="k">if</span> <span class="n">page</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">page</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">page</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">if</span> <span class="n">page</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">((</span><span class="s">&#39;bad page no.&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">,</span> <span class="p">[],</span> <span class="p">)))</span>
<span class="n">context</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;context&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">((</span><span class="s">&#39;not a get request&#39;</span><span class="p">,</span> <span class="bp">False</span><span class="p">,</span> <span class="p">[],</span> <span class="p">)))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_results</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<div class="viewcode-block" id="Select2View.respond_with_exception"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.Select2View.respond_with_exception">[docs]</a> <span class="k">def</span> <span class="nf">respond_with_exception</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">e</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> :param e: Exception object.</span>
<span class="sd"> :type e: Exception</span>
<span class="sd"> :return: Response with status code of 404 if e is ``Http404`` object,</span>
<span class="sd"> else 400.</span>
<span class="sd"> :rtype: HttpResponse</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">Http404</span><span class="p">):</span>
<span class="n">status</span> <span class="o">=</span> <span class="mi">404</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">status</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="s">&#39;status_code&#39;</span><span class="p">,</span> <span class="mi">400</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_to_response</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_results_to_context</span><span class="p">((</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="bp">False</span><span class="p">,</span> <span class="p">[],)),</span>
<span class="n">status</span><span class="o">=</span><span class="n">status</span>
<span class="p">)</span>
</div>
<span class="k">def</span> <span class="nf">_results_to_context</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span>
<span class="n">err</span><span class="p">,</span> <span class="n">has_more</span><span class="p">,</span> <span class="n">results</span> <span class="o">=</span> <span class="n">output</span>
<span class="n">res</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="n">err</span> <span class="o">==</span> <span class="n">NO_ERR_RESP</span><span class="p">:</span>
<span class="k">for</span> <span class="n">id_</span><span class="p">,</span> <span class="n">text</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s">&#39;id&#39;</span><span class="p">:</span> <span class="n">id_</span><span class="p">,</span> <span class="s">&#39;text&#39;</span><span class="p">:</span> <span class="n">text</span><span class="p">})</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s">&#39;err&#39;</span><span class="p">:</span> <span class="n">err</span><span class="p">,</span>
<span class="s">&#39;more&#39;</span><span class="p">:</span> <span class="n">has_more</span><span class="p">,</span>
<span class="s">&#39;results&#39;</span><span class="p">:</span> <span class="n">res</span><span class="p">,</span>
<span class="p">}</span>
<div class="viewcode-block" id="Select2View.check_all_permissions"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.Select2View.check_all_permissions">[docs]</a> <span class="k">def</span> <span class="nf">check_all_permissions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sub-classes can use this to raise exception on permission check failures,</span>
<span class="sd"> or these checks can be placed in ``urls.py``, e.g. ``login_required(SelectClass.as_view())``.</span>
<span class="sd"> :param request: The Ajax request object.</span>
<span class="sd"> :type request: :py:class:`django.http.HttpRequest`</span>
<span class="sd"> :param args: The ``*args`` passed to :py:meth:`django.views.generic.View.dispatch`.</span>
<span class="sd"> :param kwargs: The ``**kwargs`` passed to :py:meth:`django.views.generic.View.dispatch`.</span>
<span class="sd"> .. warning:: Sub-classes should override this. You really do not want random people making</span>
<span class="sd"> Http reqeusts to your server, be able to get access to sensitive information.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="Select2View.get_results"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.Select2View.get_results">[docs]</a> <span class="k">def</span> <span class="nf">get_results</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns the result for the given search ``term``.</span>
<span class="sd"> :param request: The Ajax request object.</span>
<span class="sd"> :type request: :py:class:`django.http.HttpRequest`</span>
<span class="sd"> :param term: The search term.</span>
<span class="sd"> :type term: :py:obj:`str`</span>
<span class="sd"> :param page: The page number. If in your last response you had signalled that there are more results,</span>
<span class="sd"> then when user scrolls more a new Ajax request would be sent for the same term but with next page</span>
<span class="sd"> number. (Page number starts at 1)</span>
<span class="sd"> :type page: :py:obj:`int`</span>
<span class="sd"> :param context: Can be anything which persists across the lifecycle of queries for the same search term.</span>
<span class="sd"> It is reset to ``None`` when the term changes.</span>
<span class="sd"> .. note:: Currently this is not used by ``heavy_data.js``.</span>
<span class="sd"> :type context: :py:obj:`str` or None</span>
<span class="sd"> Expected output is of the form::</span>
<span class="sd"> (err, has_more, [results])</span>
<span class="sd"> Where ``results = [(id1, text1), (id2, text2), ...]``</span>
<span class="sd"> For example::</span>
<span class="sd"> (&#39;nil&#39;, False,</span>
<span class="sd"> [</span>
<span class="sd"> (1, &#39;Value label1&#39;),</span>
<span class="sd"> (20, &#39;Value label2&#39;),</span>
<span class="sd"> ])</span>
<span class="sd"> When everything is fine then the `err` must be &#39;nil&#39;.</span>
<span class="sd"> `has_more` should be true if there are more rows.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">raise</span> <span class="ne">NotImplementedError</span>
</div></div>
<div class="viewcode-block" id="AutoResponseView"><a class="viewcode-back" href="../../ref_views.html#django_select2.views.AutoResponseView">[docs]</a><span class="k">class</span> <span class="nc">AutoResponseView</span><span class="p">(</span><span class="n">Select2View</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A central view meant to respond to Ajax queries for all Heavy widgets/fields.</span>
<span class="sd"> Although it is not mandatory to use, but is immensely helpful.</span>
<span class="sd"> .. tip:: Fields which want to use this view must sub-class :py:class:`~.widgets.AutoViewFieldMixin`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">check_all_permissions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">id_</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;field_id&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">id_</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">is_valid_id</span><span class="p">(</span><span class="n">id_</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">Http404</span><span class="p">(</span><span class="s">&#39;field_id not found or is invalid&#39;</span><span class="p">)</span>
<span class="n">field</span> <span class="o">=</span> <span class="n">get_field</span><span class="p">(</span><span class="n">id_</span><span class="p">)</span>
<span class="k">if</span> <span class="n">field</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">Http404</span><span class="p">(</span><span class="s">&#39;field_id not found&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">field</span><span class="o">.</span><span class="n">security_check</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">PermissionDenied</span><span class="p">(</span><span class="s">&#39;permission denied&#39;</span><span class="p">)</span>
<span class="n">request</span><span class="o">.</span><span class="n">__django_select2_local</span> <span class="o">=</span> <span class="n">field</span>
<span class="k">def</span> <span class="nf">get_results</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">):</span>
<span class="n">field</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">__django_select2_local</span>
<span class="k">del</span> <span class="n">request</span><span class="o">.</span><span class="n">__django_select2_local</span>
<span class="k">return</span> <span class="n">field</span><span class="o">.</span><span class="n">get_results</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">term</span><span class="p">,</span> <span class="n">page</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
</pre></div></div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, Nirupam Biswas.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

View file

@ -0,0 +1,589 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>django_select2.widgets &mdash; Django-Select2 3.0 documentation</title>
<link rel="stylesheet" href="../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../../',
VERSION: '3.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../../_static/jquery.js"></script>
<script type="text/javascript" src="../../_static/underscore.js"></script>
<script type="text/javascript" src="../../_static/doctools.js"></script>
<link rel="top" title="Django-Select2 3.0 documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for django_select2.widgets</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Contains all the Django widgets for Select2.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">logging</span>
<span class="kn">from</span> <span class="nn">itertools</span> <span class="kn">import</span> <span class="n">chain</span>
<span class="kn">from</span> <span class="nn">django</span> <span class="kn">import</span> <span class="n">forms</span>
<span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="kn">import</span> <span class="n">force_unicode</span>
<span class="kn">from</span> <span class="nn">django.utils.safestring</span> <span class="kn">import</span> <span class="n">mark_safe</span>
<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="kn">import</span> <span class="n">reverse</span>
<span class="kn">from</span> <span class="nn">django.utils.datastructures</span> <span class="kn">import</span> <span class="n">MultiValueDict</span><span class="p">,</span> <span class="n">MergeDict</span>
<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">render_js_script</span><span class="p">,</span> <span class="n">convert_to_js_string_arr</span><span class="p">,</span> <span class="n">JSVar</span><span class="p">,</span> <span class="n">JSFunction</span><span class="p">,</span> <span class="n">JSFunctionInContext</span><span class="p">,</span> \
<span class="n">convert_dict_to_js_map</span><span class="p">,</span> <span class="n">convert_to_js_arr</span>
<span class="n">logger</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="n">__name__</span><span class="p">)</span>
<span class="c">### Light mixin and widgets ###</span>
<div class="viewcode-block" id="Select2Mixin"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin">[docs]</a><span class="k">class</span> <span class="nc">Select2Mixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The base mixin of all Select2 widgets.</span>
<span class="sd"> This mixin is responsible for rendering the necessary Javascript and CSS codes which turns normal ``&lt;select&gt;``</span>
<span class="sd"> markups into Select2 choice list.</span>
<span class="sd"> The following Select2 otions are added by this mixin:-</span>
<span class="sd"> * minimumResultsForSearch: ``6``</span>
<span class="sd"> * placeholder: ``&#39;&#39;``</span>
<span class="sd"> * allowClear: ``True``</span>
<span class="sd"> * multiple: ``False``</span>
<span class="sd"> * closeOnSelect: ``False``</span>
<span class="sd"> .. note:: Many of them would be removed by sub-classes depending on requirements.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c"># For details on these options refer: http://ivaynberg.github.com/select2/#documentation</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;minimumResultsForSearch&#39;</span><span class="p">:</span> <span class="mi">6</span><span class="p">,</span> <span class="c"># Only applicable for single value select.</span>
<span class="s">&#39;placeholder&#39;</span><span class="p">:</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="c"># Empty text label</span>
<span class="s">&#39;allowClear&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="c"># Not allowed when field is multiple since there each value has a clear button.</span>
<span class="s">&#39;multiple&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span> <span class="c"># Not allowed when attached to &lt;select&gt;</span>
<span class="s">&#39;closeOnSelect&#39;</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
<span class="p">}</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The options listed in this are rendered as JS map and passed to Select2 JS code.</span>
<span class="sd"> The complete description of theses options are available in Select2_ JS&#39; site.</span>
<span class="sd"> .. _Select2: http://ivaynberg.github.com/select2/#documentation.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="Select2Mixin.__init__"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor of the class.</span>
<span class="sd"> The following additional kwarg is allowed:-</span>
<span class="sd"> :param select2_options: This is similar to standard Django way to pass extra attributes to widgets.</span>
<span class="sd"> This is meant to override values of existing :py:attr:`.options`.</span>
<span class="sd"> Example::</span>
<span class="sd"> class MyForm(ModelForm):</span>
<span class="sd"> class Meta:</span>
<span class="sd"> model = MyModel</span>
<span class="sd"> widgets = {</span>
<span class="sd"> &#39;name&#39;: Select2WidgetName(select2_options={</span>
<span class="sd"> &#39;minimumResultsForSearch&#39;: 10,</span>
<span class="sd"> &#39;closeOnSelect&#39;: True,</span>
<span class="sd"> })</span>
<span class="sd"> }</span>
<span class="sd"> .. tip:: You cannot introduce new options using this. For that you should sub-class and overried</span>
<span class="sd"> :py:meth:`.init_options`. The reason for this is, few options are not compatible with each other</span>
<span class="sd"> or are not applicable in some scenarios. For example, when Select2 is attached to ``&lt;select&gt;`` tag,</span>
<span class="sd"> it can get if it is multiple or single valued from that tag itself. In this case if you specify</span>
<span class="sd"> ``multiple`` option then not only it is useless but an error in Select2 JS&#39; point of view.</span>
<span class="sd"> There are other such intricacies, based on which some options are removed. By enforcing this</span>
<span class="sd"> restriction we make sure to not break the code by passing some wrong concotion of options.</span>
<span class="sd"> :type select2_options: :py:obj:`dict` or None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span> <span class="c"># Making an instance specific copy</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_options</span><span class="p">()</span>
<span class="n">select2_options</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;select2_options&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">select2_options</span><span class="p">:</span>
<span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">:</span>
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="n">name</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="n">select2_options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">Select2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Select2Mixin.init_options"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.init_options">[docs]</a> <span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sub-classes can use this to pass additional options to Select2 JS library.</span>
<span class="sd"> Example::</span>
<span class="sd"> def init_options(self):</span>
<span class="sd"> self.options[&#39;createSearchChoice&#39;] = JSFunction(&#39;Your_js_function&#39;)</span>
<span class="sd"> In the above example we are setting ``Your_js_function`` as Select2&#39;s ``createSearchChoice``</span>
<span class="sd"> function.</span>
<span class="sd"> .. tip:: If you want to run ``Your_js_function`` in the context of the Select2 DOM element,</span>
<span class="sd"> i.e. ``this`` inside your JS function should point to the component instead of ``window``, then</span>
<span class="sd"> use :py:class:`~.util.JSFunctionInContext` instead of :py:class:`~.util.JSFunction`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="Select2Mixin.set_placeholder"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.set_placeholder">[docs]</a> <span class="k">def</span> <span class="nf">set_placeholder</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Placeholder is a value which Select2 JS library shows when nothing is selected. This should be string.</span>
<span class="sd"> </span>
<span class="sd"> :return: None</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;placeholder&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span>
</div>
<div class="viewcode-block" id="Select2Mixin.get_options"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.get_options">[docs]</a> <span class="k">def</span> <span class="nf">get_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> :return: Dictionary of options to be passed to Select2 JS.</span>
<span class="sd"> </span>
<span class="sd"> :rtype: :py:obj:`dict`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span>
<span class="k">if</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;allowClear&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">options</span><span class="p">[</span><span class="s">&#39;allowClear&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_required</span>
<span class="k">return</span> <span class="n">options</span>
</div>
<div class="viewcode-block" id="Select2Mixin.render_select2_options_code"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.render_select2_options_code">[docs]</a> <span class="k">def</span> <span class="nf">render_select2_options_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">id_</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders options for Select2 JS.</span>
<span class="sd"> </span>
<span class="sd"> :return: The rendered JS code.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">convert_dict_to_js_map</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Select2Mixin.render_js_code"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.render_js_code">[docs]</a> <span class="k">def</span> <span class="nf">render_js_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders the ``&lt;script&gt;`` block which contains the JS code for this widget.</span>
<span class="sd"> </span>
<span class="sd"> :return: The rendered JS code enclosed inside ``&lt;script&gt;`` block.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">id_</span><span class="p">:</span>
<span class="k">return</span> <span class="n">render_js_script</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">render_inner_js_code</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">))</span>
<span class="k">return</span> <span class="s">u&#39;&#39;</span>
</div>
<div class="viewcode-block" id="Select2Mixin.render_inner_js_code"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.render_inner_js_code">[docs]</a> <span class="k">def</span> <span class="nf">render_inner_js_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders all the JS code required for this widget.</span>
<span class="sd"> </span>
<span class="sd"> :return: The rendered JS code which will be later enclosed inside ``&lt;script&gt;`` block.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_options</span><span class="p">())</span>
<span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_select2_options_code</span><span class="p">(</span><span class="n">options</span><span class="p">,</span> <span class="n">id_</span><span class="p">)</span>
<span class="k">return</span> <span class="s">u&#39;$(&quot;#</span><span class="si">%s</span><span class="s">&quot;).select2(</span><span class="si">%s</span><span class="s">);&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">options</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Select2Mixin.render"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Mixin.render">[docs]</a> <span class="k">def</span> <span class="nf">render</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="p">()):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders this widget. Html and JS code blocks all are rendered by this.</span>
<span class="sd"> </span>
<span class="sd"> :return: The rendered markup.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="p">]</span>
<span class="k">if</span> <span class="n">choices</span><span class="p">:</span> <span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
<span class="n">s</span> <span class="o">=</span> <span class="nb">unicode</span><span class="p">(</span><span class="nb">super</span><span class="p">(</span><span class="n">Select2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">))</span> <span class="c"># Thanks to @ouhouhsami Issue#1</span>
<span class="n">s</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">media</span><span class="o">.</span><span class="n">render</span><span class="p">()</span>
<span class="n">final_attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_attrs</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span>
<span class="n">id_</span> <span class="o">=</span> <span class="n">final_attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;id&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="n">s</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_js_code</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="p">,</span> <span class="n">choices</span><span class="p">)</span>
<span class="k">if</span> <span class="n">logger</span><span class="o">.</span><span class="n">isEnabledFor</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s">&quot;Generated widget code:-</span><span class="se">\n</span><span class="si">%s</span><span class="s">&quot;</span><span class="p">,</span> <span class="n">s</span><span class="p">)</span>
<span class="k">return</span> <span class="n">mark_safe</span><span class="p">(</span><span class="n">s</span><span class="p">)</span>
</div>
<span class="k">class</span> <span class="nc">Media</span><span class="p">:</span>
<span class="n">js</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;js/select2.min.js&#39;</span><span class="p">,</span> <span class="p">)</span>
<span class="n">css</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;screen&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;css/select2.css&#39;</span><span class="p">,</span> <span class="s">&#39;css/extra.css&#39;</span><span class="p">,</span> <span class="p">)}</span>
</div>
<div class="viewcode-block" id="Select2Widget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2Widget">[docs]</a><span class="k">class</span> <span class="nc">Select2Widget</span><span class="p">(</span><span class="n">Select2Mixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">Select</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Drop-in Select2 replacement for :py:class:`forms.Select`.</span>
<span class="sd"> Following Select2 option from :py:attr:`.Select2Mixin.options` is removed:-</span>
<span class="sd"> * multiple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;multiple&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">render_options</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">choices</span><span class="p">,</span> <span class="n">selected_choices</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_required</span><span class="p">:</span>
<span class="n">choices</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">choices</span><span class="p">)</span>
<span class="n">choices</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">,</span> <span class="p">))</span> <span class="c"># Adding an empty choice</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">Select2Widget</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render_options</span><span class="p">(</span><span class="n">choices</span><span class="p">,</span> <span class="n">selected_choices</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Select2MultipleWidget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.Select2MultipleWidget">[docs]</a><span class="k">class</span> <span class="nc">Select2MultipleWidget</span><span class="p">(</span><span class="n">Select2Mixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">SelectMultiple</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Drop-in Select2 replacement for :py:class:`forms.SelectMultiple`.</span>
<span class="sd"> Following Select2 options from :py:attr:`.Select2Mixin.options` are removed:-</span>
<span class="sd"> * multiple</span>
<span class="sd"> * allowClear</span>
<span class="sd"> * minimumResultsForSearch</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;multiple&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;allowClear&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;minimumResultsForSearch&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="c">### Specialized Multiple Hidden Input Widget ###</span></div>
<div class="viewcode-block" id="MultipleSelect2HiddenInput"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.MultipleSelect2HiddenInput">[docs]</a><span class="k">class</span> <span class="nc">MultipleSelect2HiddenInput</span><span class="p">(</span><span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Multiple hidden input for Select2.</span>
<span class="sd"> This is a specialized multiple Hidden Input widget. This includes a special</span>
<span class="sd"> JS component which renders multiple Hidden Input boxes as there are values.</span>
<span class="sd"> So, if user suppose chooses values 1, 4 and 9 then Select2 would would write them</span>
<span class="sd"> to the primary hidden input. The JS component of this widget will read that value and</span>
<span class="sd"> will render three more hidden input boxes each with values 1, 4 and 9 respectively.</span>
<span class="sd"> They will all share the name of this field, and the name of the primary source</span>
<span class="sd"> hidden input would be removed. This way, when submitted all the selected values</span>
<span class="sd"> would be available as list.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">input_type</span> <span class="o">=</span> <span class="s">&#39;hidden&#39;</span> <span class="c"># We want it hidden but should be treated as if is_hidden is False</span>
<span class="k">def</span> <span class="nf">render</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="p">()):</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">build_attrs</span><span class="p">(</span><span class="n">attrs</span><span class="p">,</span> <span class="n">multiple</span><span class="o">=</span><span class="s">&#39;multiple&#39;</span><span class="p">)</span>
<span class="n">s</span> <span class="o">=</span> <span class="nb">unicode</span><span class="p">(</span><span class="nb">super</span><span class="p">(</span><span class="n">MultipleSelect2HiddenInput</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="s">u&quot;&quot;</span><span class="p">,</span> <span class="n">attrs</span><span class="p">))</span>
<span class="n">id_</span> <span class="o">=</span> <span class="n">attrs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;id&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">id_</span><span class="p">:</span>
<span class="n">jscode</span> <span class="o">=</span> <span class="s">u&#39;&#39;</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="n">jscode</span> <span class="o">=</span> <span class="s">u&quot;$(&#39;#</span><span class="si">%s</span><span class="s">&#39;).val(django_select2.convertArrToStr(</span><span class="si">%s</span><span class="s">));&quot;</span> \
<span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">convert_to_js_arr</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">id_</span><span class="p">))</span>
<span class="n">jscode</span> <span class="o">+=</span> <span class="s">u&quot;django_select2.initMultipleHidden($(&#39;#</span><span class="si">%s</span><span class="s">&#39;));&quot;</span> <span class="o">%</span> <span class="n">id_</span>
<span class="n">s</span> <span class="o">+=</span> <span class="n">render_js_script</span><span class="p">(</span><span class="n">jscode</span><span class="p">)</span>
<span class="k">return</span> <span class="n">s</span>
<span class="k">def</span> <span class="nf">value_from_datadict</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="n">files</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="p">(</span><span class="n">MultiValueDict</span><span class="p">,</span> <span class="n">MergeDict</span><span class="p">)):</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">getlist</span><span class="p">(</span><span class="n">name</span><span class="p">)</span>
<span class="k">return</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="c">### Heavy mixins and widgets ###</span>
</div>
<div class="viewcode-block" id="HeavySelect2Mixin"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2Mixin">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2Mixin</span><span class="p">(</span><span class="n">Select2Mixin</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The base mixin of all Heavy Select2 widgets. It sub-classes :py:class:`Select2Mixin`.</span>
<span class="sd"> This mixin adds more Select2 options to :py:attr:`.Select2Mixin.options`. These are:-</span>
<span class="sd"> * minimumInputLength: ``2``</span>
<span class="sd"> * initSelection: ``JSFunction(&#39;django_select2.onInit&#39;)``</span>
<span class="sd"> * ajax:</span>
<span class="sd"> * dataType: ``&#39;json&#39;``</span>
<span class="sd"> * quietMillis: ``100``</span>
<span class="sd"> * data: ``JSFunctionInContext(&#39;django_select2.get_url_params&#39;)``</span>
<span class="sd"> * results: ``JSFunctionInContext(&#39;django_select2.process_results&#39;)``</span>
<span class="sd"> .. tip:: You can override these options by passing ``select2_options`` kwarg to :py:meth:`.__init__`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="HeavySelect2Mixin.__init__"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2Mixin.__init__">[docs]</a> <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor of the class.</span>
<span class="sd"> The following kwargs are allowed:-</span>
<span class="sd"> :param data_view: A :py:class:`~.views.Select2View` sub-class which can respond to this widget&#39;s Ajax queries.</span>
<span class="sd"> :type data_view: :py:class:`django.views.generic.View` or None</span>
<span class="sd"> :param data_url: Url which will respond to Ajax queries with JSON object.</span>
<span class="sd"> :type data_url: :py:obj:`str` or None</span>
<span class="sd"> .. tip:: When ``data_view`` is provided then it is converted into Url using</span>
<span class="sd"> :py:func:`~django.core.urlresolvers.reverse`.</span>
<span class="sd"> .. warning:: Either of ``data_view`` or ``data_url`` must be specified, else :py:exc:`ValueError` would</span>
<span class="sd"> be raised.</span>
<span class="sd"> :param choices: The list of available choices. If not provided then empty list is used instead. It</span>
<span class="sd"> should be of the form -- ``[(val1, &#39;Label1&#39;), (val2, &#39;Label2&#39;), ...]``.</span>
<span class="sd"> :type choices: :py:obj:`list` or :py:obj:`tuple`</span>
<span class="sd"> :param userGetValTextFuncName: The name of the custom JS function which you want to use to convert</span>
<span class="sd"> value to label.</span>
<span class="sd"> In ``heavy_data.js``, ``django_select2.getValText()`` employs the following logic to convert value</span>
<span class="sd"> to label :-</span>
<span class="sd"> 1. First check if the Select2 input field has ``txt`` attribute set along with ``value``. If found</span>
<span class="sd"> then use it.</span>
<span class="sd"> 2. Otherwise, check if user has provided any custom method for this. Then use that. If it returns a</span>
<span class="sd"> label then use it.</span>
<span class="sd"> 3. Otherwise, check the cached results. When the user searches in the fields then all the returned</span>
<span class="sd"> responses from server, which has the value and label mapping, are cached by ``heavy_data.js``.</span>
<span class="sd"> 4. If we still do not have the label then check the cookies. When user selects some value then</span>
<span class="sd"> ``heavy_data.js`` stores the selected values and their labels in the cookies. These are cleared</span>
<span class="sd"> when browser is closed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">)</span> <span class="c"># Making an instance specific copy</span>
<span class="bp">self</span><span class="o">.</span><span class="n">view</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;data_view&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;data_url&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">userGetValTextFuncName</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;userGetValTextFuncName&#39;</span><span class="p">,</span> <span class="s">u&#39;null&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">choices</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;choices&#39;</span><span class="p">,</span> <span class="p">[])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">view</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s">&#39;data_view or data_url is required&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;ajax&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="s">&#39;dataType&#39;</span><span class="p">:</span> <span class="s">&#39;json&#39;</span><span class="p">,</span>
<span class="s">&#39;quietMillis&#39;</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span>
<span class="s">&#39;data&#39;</span><span class="p">:</span> <span class="n">JSFunctionInContext</span><span class="p">(</span><span class="s">&#39;django_select2.get_url_params&#39;</span><span class="p">),</span>
<span class="s">&#39;results&#39;</span><span class="p">:</span> <span class="n">JSFunctionInContext</span><span class="p">(</span><span class="s">&#39;django_select2.process_results&#39;</span><span class="p">),</span>
<span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;minimumInputLength&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">2</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;initSelection&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">JSFunction</span><span class="p">(</span><span class="s">&#39;django_select2.onInit&#39;</span><span class="p">)</span>
<span class="nb">super</span><span class="p">(</span><span class="n">HeavySelect2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="HeavySelect2Mixin.render_texts"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2Mixin.render_texts">[docs]</a> <span class="k">def</span> <span class="nf">render_texts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">selected_choices</span><span class="p">,</span> <span class="n">choices</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders a JS array with labels for the ``selected_choices``.</span>
<span class="sd"> :param selected_choices: List of selected choices&#39; values.</span>
<span class="sd"> :type selected_choices: :py:obj:`list` or :py:obj:`tuple`</span>
<span class="sd"> :param choices: Extra choices, if any. This is a list of tuples. In each tuple, the first</span>
<span class="sd"> item is the choice value and the second item is choice label.</span>
<span class="sd"> :type choices: :py:obj:`list` or :py:obj:`tuple`</span>
<span class="sd"> :return: The rendered JS array code.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">selected_choices</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">force_unicode</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">selected_choices</span><span class="p">)</span>
<span class="n">txts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">all_choices</span> <span class="o">=</span> <span class="n">choices</span> <span class="k">if</span> <span class="n">choices</span> <span class="k">else</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">val</span><span class="p">,</span> <span class="n">txt</span> <span class="ow">in</span> <span class="n">chain</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">choices</span><span class="p">,</span> <span class="n">all_choices</span><span class="p">):</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">force_unicode</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
<span class="k">if</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">selected_choices</span><span class="p">:</span>
<span class="n">txts</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">txt</span><span class="p">)</span>
<span class="k">if</span> <span class="n">txts</span><span class="p">:</span>
<span class="k">return</span> <span class="n">convert_to_js_string_arr</span><span class="p">(</span><span class="n">txts</span><span class="p">)</span>
</div>
<span class="k">def</span> <span class="nf">get_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">view</span><span class="p">)</span> <span class="c"># We lazy resolve the view. By this time Url conf would been loaded fully.</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;ajax&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s">&#39;url&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;ajax&#39;</span><span class="p">][</span><span class="s">&#39;url&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">url</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">(</span><span class="n">HeavySelect2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">get_options</span><span class="p">()</span>
<div class="viewcode-block" id="HeavySelect2Mixin.render_texts_for_value"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2Mixin.render_texts_for_value">[docs]</a> <span class="k">def</span> <span class="nf">render_texts_for_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">choices</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders the JS code which sets the ``txt`` attribute on the field. It gets the array</span>
<span class="sd"> of lables from :py:meth:`.render_texts`.</span>
<span class="sd"> :param id_: Id of the field. This can be used to get reference of this field&#39;s DOM in JS.</span>
<span class="sd"> :type id_: :py:obj:`str`</span>
<span class="sd"> :param value: Currently set value on the field.</span>
<span class="sd"> :type value: Any</span>
<span class="sd"> :param choices: Extra choices, if any. This is a list of tuples. In each tuple, the first</span>
<span class="sd"> item is the choice value and the second item is choice label.</span>
<span class="sd"> :type choices: :py:obj:`list` or :py:obj:`tuple`</span>
<span class="sd"> :return: JS code which sets the ``txt`` attribute.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">[</span><span class="n">value</span><span class="p">]</span> <span class="c"># Just like forms.Select.render() it assumes that value will be single valued.</span>
<span class="n">texts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_texts</span><span class="p">(</span><span class="n">values</span><span class="p">,</span> <span class="n">choices</span><span class="p">)</span>
<span class="k">if</span> <span class="n">texts</span><span class="p">:</span>
<span class="k">return</span> <span class="s">u&quot;$(&#39;#</span><span class="si">%s</span><span class="s">&#39;).txt(</span><span class="si">%s</span><span class="s">);&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">texts</span><span class="p">)</span>
</div>
<span class="k">def</span> <span class="nf">render_inner_js_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="p">(),</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="n">js</span> <span class="o">=</span> <span class="s">u&quot;$(&#39;#</span><span class="si">%s</span><span class="s">&#39;).change(django_select2.onValChange).data(&#39;userGetValText&#39;, </span><span class="si">%s</span><span class="s">);&quot;</span> \
<span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">userGetValTextFuncName</span><span class="p">)</span>
<span class="n">texts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_texts_for_value</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">choices</span><span class="p">)</span>
<span class="k">if</span> <span class="n">texts</span><span class="p">:</span>
<span class="n">js</span> <span class="o">+=</span> <span class="n">texts</span>
<span class="n">js</span> <span class="o">+=</span> <span class="nb">super</span><span class="p">(</span><span class="n">HeavySelect2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render_inner_js_code</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">attrs</span><span class="p">,</span> <span class="n">choices</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="n">js</span>
<span class="k">class</span> <span class="nc">Media</span><span class="p">:</span>
<span class="n">js</span> <span class="o">=</span> <span class="p">(</span><span class="s">&#39;js/select2.min.js&#39;</span><span class="p">,</span> <span class="s">&#39;js/heavy_data.js&#39;</span><span class="p">,</span> <span class="p">)</span>
<span class="n">css</span> <span class="o">=</span> <span class="p">{</span><span class="s">&#39;screen&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s">&#39;css/select2.css&#39;</span><span class="p">,</span> <span class="s">&#39;css/extra.css&#39;</span><span class="p">,</span> <span class="p">)}</span>
</div>
<div class="viewcode-block" id="HeavySelect2Widget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2Widget">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2Widget</span><span class="p">(</span><span class="n">HeavySelect2Mixin</span><span class="p">,</span> <span class="n">forms</span><span class="o">.</span><span class="n">TextInput</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Single selection heavy widget.</span>
<span class="sd"> Following Select2 option from :py:attr:`.Select2Mixin.options` is added or set:-</span>
<span class="sd"> * multiple: ``False``</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">input_type</span> <span class="o">=</span> <span class="s">&#39;hidden&#39;</span> <span class="c"># We want it hidden but should be treated as if is_hidden is False</span>
<span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;multiple&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">False</span>
</div>
<div class="viewcode-block" id="HeavySelect2MultipleWidget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2MultipleWidget">[docs]</a><span class="k">class</span> <span class="nc">HeavySelect2MultipleWidget</span><span class="p">(</span><span class="n">HeavySelect2Mixin</span><span class="p">,</span> <span class="n">MultipleSelect2HiddenInput</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Multiple selection heavy widget.</span>
<span class="sd"> Following Select2 options from :py:attr:`.Select2Mixin.options` are removed:-</span>
<span class="sd"> * allowClear</span>
<span class="sd"> * minimumResultsForSearch</span>
<span class="sd"> Following Select2 options from :py:attr:`.Select2Mixin.options` are added or set:-</span>
<span class="sd"> * multiple: ``False``</span>
<span class="sd"> * separator: ``JSVar(&#39;django_select2.MULTISEPARATOR&#39;)``</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;multiple&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;allowClear&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s">&#39;minimumResultsForSearch&#39;</span><span class="p">,</span> <span class="bp">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span><span class="p">[</span><span class="s">&#39;separator&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">JSVar</span><span class="p">(</span><span class="s">&#39;django_select2.MULTISEPARATOR&#39;</span><span class="p">)</span>
<div class="viewcode-block" id="HeavySelect2MultipleWidget.render_texts_for_value"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.HeavySelect2MultipleWidget.render_texts_for_value">[docs]</a> <span class="k">def</span> <span class="nf">render_texts_for_value</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">choices</span><span class="p">):</span> <span class="c"># value is expected to be a list of values</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Renders the JS code which sets the ``txt`` attribute on the field. It gets the array</span>
<span class="sd"> of lables from :py:meth:`.render_texts`.</span>
<span class="sd"> :param id_: Id of the field. This can be used to get reference of this field&#39;s DOM in JS.</span>
<span class="sd"> :type id_: :py:obj:`str`</span>
<span class="sd"> :param value: **List** of currently set value on the field.</span>
<span class="sd"> :type value: :py:obj:`list`</span>
<span class="sd"> :param choices: Extra choices, if any. This is a list of tuples. In each tuple, the first</span>
<span class="sd"> item is the choice value and the second item is choice label.</span>
<span class="sd"> :type choices: :py:obj:`list` or :py:obj:`tuple`</span>
<span class="sd"> :return: JS code which sets the ``txt`` attribute.</span>
<span class="sd"> :rtype: :py:obj:`unicode`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">value</span><span class="p">:</span> <span class="c"># Just like forms.SelectMultiple.render() it assumes that value will be multi-valued (list).</span>
<span class="n">texts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">render_texts</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">choices</span><span class="p">)</span>
<span class="k">if</span> <span class="n">texts</span><span class="p">:</span>
<span class="k">return</span> <span class="s">u&quot;$(&#39;#</span><span class="si">%s</span><span class="s">&#39;).txt(</span><span class="si">%s</span><span class="s">);&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="n">texts</span><span class="p">)</span>
<span class="c">### Auto Heavy widgets ###</span>
</div></div>
<div class="viewcode-block" id="AutoHeavySelect2Mixin"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.AutoHeavySelect2Mixin">[docs]</a><span class="k">class</span> <span class="nc">AutoHeavySelect2Mixin</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This mixin is needed for Auto heavy fields.</span>
<span class="sd"> This mxin adds extra JS code to notify the field&#39;s DOM object of the generated id. The generated id</span>
<span class="sd"> is not the same as the ``id`` attribute of the field&#39;s Html markup. This id is generated by</span>
<span class="sd"> :py:func:`~.util.register_field` when the Auto field is registered. The client side (DOM) sends this</span>
<span class="sd"> id along with the Ajax request, so that the central view can identify which field should be used to</span>
<span class="sd"> serve the request.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">render_inner_js_code</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">id_</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="n">js</span> <span class="o">=</span> <span class="s">u&quot;$(&#39;#</span><span class="si">%s</span><span class="s">&#39;).data(&#39;field_id&#39;, &#39;</span><span class="si">%s</span><span class="s">&#39;);&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">field_id</span><span class="p">)</span>
<span class="n">js</span> <span class="o">+=</span> <span class="nb">super</span><span class="p">(</span><span class="n">AutoHeavySelect2Mixin</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">render_inner_js_code</span><span class="p">(</span><span class="n">id_</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="n">js</span>
</div>
<div class="viewcode-block" id="AutoHeavySelect2Widget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.AutoHeavySelect2Widget">[docs]</a><span class="k">class</span> <span class="nc">AutoHeavySelect2Widget</span><span class="p">(</span><span class="n">AutoHeavySelect2Mixin</span><span class="p">,</span> <span class="n">HeavySelect2Widget</span><span class="p">):</span>
<span class="s">&quot;Auto version of :py:class:`.HeavySelect2Widget`&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="AutoHeavySelect2MultipleWidget"><a class="viewcode-back" href="../../ref_widgets.html#django_select2.widgets.AutoHeavySelect2MultipleWidget">[docs]</a><span class="k">class</span> <span class="nc">AutoHeavySelect2MultipleWidget</span><span class="p">(</span><span class="n">AutoHeavySelect2Mixin</span><span class="p">,</span> <span class="n">HeavySelect2MultipleWidget</span><span class="p">):</span>
<span class="s">&quot;Auto version of :py:class:`.HeavySelect2MultipleWidget`&quot;</span>
<span class="k">pass</span>
</pre></div></div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, Nirupam Biswas.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

94
docs/_build/html/_modules/index.html vendored Normal file
View file

@ -0,0 +1,94 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &mdash; Django-Select2 3.0 documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '3.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<link rel="top" title="Django-Select2 3.0 documentation" href="../index.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>All modules for which code is available</h1>
<ul><li><a href="django_select2/fields.html">django_select2.fields</a></li>
<li><a href="django_select2/util.html">django_select2.util</a></li>
<li><a href="django_select2/views.html">django_select2.views</a></li>
<li><a href="django_select2/widgets.html">django_select2.widgets</a></li>
</ul>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="../search.html" method="get">
<input type="text" name="q" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">Django-Select2 3.0 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2012, Nirupam Biswas.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.1.3.
</div>
</body>
</html>

Binary file not shown.

View file

@ -60,7 +60,7 @@
<p>Contains all the Django fields for Select2.</p>
<dl class="class">
<dt id="django_select2.fields.AutoViewFieldMixin">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoViewFieldMixin</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoViewFieldMixin</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoViewFieldMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>Registers itself with AutoResponseView.</p>
<p>All Auto fields must sub-class this mixin, so that they are registered.</p>
@ -71,18 +71,18 @@ central view used to serve Auto fields won&#8217;t be available.</p>
</div>
<dl class="method">
<dt id="django_select2.fields.AutoViewFieldMixin.__init__">
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.__init__" title="Permalink to this definition"></a></dt>
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoViewFieldMixin.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Class constructor.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>auto_id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt>) &#8211; <p>The key to use while registering this field. If it is not provided then
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>auto_id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a>) &#8211; <p>The key to use while registering this field. If it is not provided then
an auto generated key is used.</p>
<div class="admonition tip">
<p class="first admonition-title">Tip</p>
<p>This mixin uses full class name of the field to register itself. This is
used like key in a <tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt> by <a class="reference internal" href="ref_util.html#django_select2.util.register_field" title="django_select2.util.register_field"><tt class="xref py py-func docutils literal"><span class="pre">util.register_field()</span></tt></a>.</p>
used like key in a <a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a> by <a class="reference internal" href="ref_util.html#django_select2.util.register_field" title="django_select2.util.register_field"><tt class="xref py py-func docutils literal"><span class="pre">util.register_field()</span></tt></a>.</p>
<p>If that key already exists then the instance is not registered again. So, eventually
all instances of an Auto field share one instance to respond to the Ajax queries for
its fields.</p>
@ -97,14 +97,14 @@ provide a unique key which has never occured before.</p>
<dl class="method">
<dt id="django_select2.fields.AutoViewFieldMixin.security_check">
<tt class="descname">security_check</tt><big>(</big><em>request</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.security_check" title="Permalink to this definition"></a></dt>
<tt class="descname">security_check</tt><big>(</big><em>request</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoViewFieldMixin.security_check"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.security_check" title="Permalink to this definition"></a></dt>
<dd><p>Returns <tt class="docutils literal"><span class="pre">False</span></tt> if security check fails.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>request</strong> (<tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt>) &#8211; The Ajax request object.</li>
<li><strong>request</strong> (<a class="reference external" href="http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest" title="(in Django v1.5)"><tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt></a>) &#8211; The Ajax request object.</li>
<li><strong>args</strong> &#8211; The <tt class="docutils literal"><span class="pre">*args</span></tt> passed to <tt class="xref py py-meth docutils literal"><span class="pre">django.views.generic.View.dispatch()</span></tt>.</li>
<li><strong>kwargs</strong> &#8211; The <tt class="docutils literal"><span class="pre">**kwargs</span></tt> passed to <tt class="xref py py-meth docutils literal"><span class="pre">django.views.generic.View.dispatch()</span></tt>.</li>
</ul>
@ -113,7 +113,7 @@ provide a unique key which has never occured before.</p>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">A boolean value, signalling if check passed or failed.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">bool</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#bool" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">bool</span></tt></a></p>
</td>
</tr>
</tbody>
@ -127,7 +127,7 @@ Http reqeusts to your server, be able to get access to sensitive information.</p
<dl class="method">
<dt id="django_select2.fields.AutoViewFieldMixin.get_results">
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.get_results" title="Permalink to this definition"></a></dt>
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoViewFieldMixin.get_results"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoViewFieldMixin.get_results" title="Permalink to this definition"></a></dt>
<dd><p>See <a class="reference internal" href="ref_views.html#django_select2.views.Select2View.get_results" title="django_select2.views.Select2View.get_results"><tt class="xref py py-meth docutils literal"><span class="pre">views.Select2View.get_results()</span></tt></a>.</p>
</dd></dl>
@ -135,7 +135,7 @@ Http reqeusts to your server, be able to get access to sensitive information.</p
<dl class="class">
<dt id="django_select2.fields.Select2ChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">Select2ChoiceField</tt><big>(</big><em>choices=()</em>, <em>required=True</em>, <em>widget=None</em>, <em>label=None</em>, <em>initial=None</em>, <em>help_text=None</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.Select2ChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">Select2ChoiceField</tt><big>(</big><em>choices=()</em>, <em>required=True</em>, <em>widget=None</em>, <em>label=None</em>, <em>initial=None</em>, <em>help_text=None</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#Select2ChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.Select2ChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">django.forms.fields.ChoiceField</span></tt></p>
<p>Drop-in Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.ChoiceField</span></tt>.</p>
<dl class="attribute">
@ -148,7 +148,7 @@ Http reqeusts to your server, be able to get access to sensitive information.</p
<dl class="class">
<dt id="django_select2.fields.Select2MultipleChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">Select2MultipleChoiceField</tt><big>(</big><em>choices=()</em>, <em>required=True</em>, <em>widget=None</em>, <em>label=None</em>, <em>initial=None</em>, <em>help_text=None</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.Select2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">Select2MultipleChoiceField</tt><big>(</big><em>choices=()</em>, <em>required=True</em>, <em>widget=None</em>, <em>label=None</em>, <em>initial=None</em>, <em>help_text=None</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#Select2MultipleChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.Select2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">django.forms.fields.MultipleChoiceField</span></tt></p>
<p>Drop-in Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.MultipleChoiceField</span></tt>.</p>
<dl class="attribute">
@ -161,7 +161,7 @@ Http reqeusts to your server, be able to get access to sensitive information.</p
<dl class="class">
<dt id="django_select2.fields.ModelResultJsonMixin">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelResultJsonMixin</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelResultJsonMixin</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelResultJsonMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>Makes <tt class="docutils literal"><span class="pre">heavy_data.js</span></tt> parsable JSON response for queries on its model.</p>
<p>On query it uses <a class="reference internal" href="#django_select2.fields.ModelResultJsonMixin.prepare_qs_params" title="django_select2.fields.ModelResultJsonMixin.prepare_qs_params"><tt class="xref py py-meth docutils literal"><span class="pre">prepare_qs_params()</span></tt></a> to prepare query attributes
@ -170,17 +170,17 @@ which it then passes to <tt class="docutils literal"><span class="pre">self.quer
<tt class="docutils literal"><span class="pre">search_fields</span></tt>, which should be a list of field names to search for.</p>
<dl class="method">
<dt id="django_select2.fields.ModelResultJsonMixin.__init__">
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.__init__" title="Permalink to this definition"></a></dt>
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelResultJsonMixin.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Class constructor.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>queryset</strong> (<tt class="xref py py-class docutils literal"><span class="pre">django.db.models.query.QuerySet</span></tt> or None) &#8211; This can be passed as kwarg here or defined as field variabel,
<li><strong>queryset</strong> (<a class="reference external" href="http://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet" title="(in Django v1.5)"><tt class="xref py py-class docutils literal"><span class="pre">django.db.models.query.QuerySet</span></tt></a> or None) &#8211; This can be passed as kwarg here or defined as field variabel,
like <tt class="docutils literal"><span class="pre">search_fields</span></tt>.</li>
<li><strong>max_results</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">int</span></tt>) &#8211; Maximum number to results to return per Ajax query.</li>
<li><strong>to_field_name</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; Which field&#8217;s value should be returned as result tuple&#8217;s
<li><strong>max_results</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#int" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">int</span></tt></a>) &#8211; Maximum number to results to return per Ajax query.</li>
<li><strong>to_field_name</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; Which field&#8217;s value should be returned as result tuple&#8217;s
value. (Default is <tt class="docutils literal"><span class="pre">pk</span></tt>, i.e. the id field of the model)</li>
</ul>
</td>
@ -191,7 +191,7 @@ value. (Default is <tt class="docutils literal"><span class="pre">pk</span></tt>
<dl class="method">
<dt id="django_select2.fields.ModelResultJsonMixin.label_from_instance">
<tt class="descname">label_from_instance</tt><big>(</big><em>obj</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.label_from_instance" title="Permalink to this definition"></a></dt>
<tt class="descname">label_from_instance</tt><big>(</big><em>obj</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelResultJsonMixin.label_from_instance"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.label_from_instance" title="Permalink to this definition"></a></dt>
<dd><p>Sub-classes should override this to generate custom label texts for values.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
@ -201,7 +201,7 @@ value. (Default is <tt class="docutils literal"><span class="pre">pk</span></tt>
</tr>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">The label string.</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></td>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
@ -209,14 +209,14 @@ value. (Default is <tt class="docutils literal"><span class="pre">pk</span></tt>
<dl class="method">
<dt id="django_select2.fields.ModelResultJsonMixin.prepare_qs_params">
<tt class="descname">prepare_qs_params</tt><big>(</big><em>request</em>, <em>search_term</em>, <em>search_fields</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.prepare_qs_params" title="Permalink to this definition"></a></dt>
<tt class="descname">prepare_qs_params</tt><big>(</big><em>request</em>, <em>search_term</em>, <em>search_fields</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelResultJsonMixin.prepare_qs_params"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.prepare_qs_params" title="Permalink to this definition"></a></dt>
<dd><p>Prepares queryset parameter to use for searching.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>search_term</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt>) &#8211; The search term.</li>
<li><strong>search_term</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a>) &#8211; The search term.</li>
<li><strong>search_fields</strong> &#8211; The list of search fields. This is same as <tt class="docutils literal"><span class="pre">self.search_fields</span></tt>.</li>
</ul>
</td>
@ -265,7 +265,7 @@ Also then <tt class="docutils literal"><span class="pre">and</span></tt> part is
</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a></p>
</td>
</tr>
</tbody>
@ -274,7 +274,7 @@ Also then <tt class="docutils literal"><span class="pre">and</span></tt> part is
<dl class="method">
<dt id="django_select2.fields.ModelResultJsonMixin.get_results">
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.get_results" title="Permalink to this definition"></a></dt>
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelResultJsonMixin.get_results"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelResultJsonMixin.get_results" title="Permalink to this definition"></a></dt>
<dd><p>See <a class="reference internal" href="ref_views.html#django_select2.views.Select2View.get_results" title="django_select2.views.Select2View.get_results"><tt class="xref py py-meth docutils literal"><span class="pre">views.Select2View.get_results()</span></tt></a>.</p>
<p>This implementation takes care of detecting if more results are available.</p>
</dd></dl>
@ -283,7 +283,7 @@ Also then <tt class="docutils literal"><span class="pre">and</span></tt> part is
<dl class="class">
<dt id="django_select2.fields.UnhideableQuerysetType">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">UnhideableQuerysetType</tt><a class="headerlink" href="#django_select2.fields.UnhideableQuerysetType" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">UnhideableQuerysetType</tt><a class="reference internal" href="_modules/django_select2/fields.html#UnhideableQuerysetType"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.UnhideableQuerysetType" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">type</span></tt></p>
<p>This does some pretty nasty hacky stuff, to make sure users can
also define <tt class="docutils literal"><span class="pre">queryset</span></tt> as class-level field variable, instead of
@ -292,7 +292,7 @@ passing it to constructor.</p>
<dl class="class">
<dt id="django_select2.fields.ChoiceMixin">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ChoiceMixin</tt><a class="headerlink" href="#django_select2.fields.ChoiceMixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ChoiceMixin</tt><a class="reference internal" href="_modules/django_select2/fields.html#ChoiceMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ChoiceMixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>Simple mixin which provides a property &#8211; <tt class="docutils literal"><span class="pre">choices</span></tt>. When <tt class="docutils literal"><span class="pre">choices</span></tt> is set,
then it sets that value to <tt class="docutils literal"><span class="pre">self.widget.choices</span></tt> too.</p>
@ -300,7 +300,7 @@ then it sets that value to <tt class="docutils literal"><span class="pre">self.w
<dl class="class">
<dt id="django_select2.fields.QuerysetChoiceMixin">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">QuerysetChoiceMixin</tt><a class="headerlink" href="#django_select2.fields.QuerysetChoiceMixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">QuerysetChoiceMixin</tt><a class="reference internal" href="_modules/django_select2/fields.html#QuerysetChoiceMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.QuerysetChoiceMixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.ChoiceMixin" title="django_select2.fields.ChoiceMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ChoiceMixin</span></tt></a></p>
<p>Overrides <tt class="docutils literal"><span class="pre">choices</span></tt>&#8216; getter to return instance of <tt class="xref py py-class docutils literal"><span class="pre">ModelChoiceIterator</span></tt>
instead.</p>
@ -308,7 +308,7 @@ instead.</p>
<dl class="class">
<dt id="django_select2.fields.ModelSelect2Field">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelSelect2Field" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelSelect2Field"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelSelect2Field" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelChoiceField</span></tt></p>
<p>Light Select2 field, specialized for Models.</p>
<p>Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.ModelChoiceField</span></tt>.</p>
@ -322,7 +322,7 @@ instead.</p>
<dl class="class">
<dt id="django_select2.fields.ModelSelect2MultipleField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.ModelSelect2MultipleField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">ModelSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#ModelSelect2MultipleField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.ModelSelect2MultipleField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelMultipleChoiceField</span></tt></p>
<p>Light multiple-value Select2 field, specialized for Models.</p>
<p>Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.ModelMultipleChoiceField</span></tt>.</p>
@ -336,12 +336,12 @@ instead.</p>
<dl class="class">
<dt id="django_select2.fields.HeavySelect2FieldBase">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2FieldBase</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavySelect2FieldBase" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2FieldBase</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavySelect2FieldBase"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavySelect2FieldBase" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.ChoiceMixin" title="django_select2.fields.ChoiceMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ChoiceMixin</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django.forms.fields.Field</span></tt></p>
<p>Base field for all Heavy fields.</p>
<dl class="method">
<dt id="django_select2.fields.HeavySelect2FieldBase.__init__">
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavySelect2FieldBase.__init__" title="Permalink to this definition"></a></dt>
<tt class="descname">__init__</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavySelect2FieldBase.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavySelect2FieldBase.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Class constructor.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
@ -366,7 +366,7 @@ be raised.</p>
<dl class="class">
<dt id="django_select2.fields.HeavySelect2ChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2ChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavySelect2ChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2ChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavySelect2ChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavySelect2ChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.HeavySelect2FieldBase" title="django_select2.fields.HeavySelect2FieldBase"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2FieldBase</span></tt></a></p>
<p>Heavy Select2 Choice field.</p>
<dl class="attribute">
@ -379,7 +379,7 @@ be raised.</p>
<dl class="class">
<dt id="django_select2.fields.HeavySelect2MultipleChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2MultipleChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavySelect2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavySelect2MultipleChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavySelect2MultipleChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavySelect2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.HeavySelect2FieldBase" title="django_select2.fields.HeavySelect2FieldBase"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2FieldBase</span></tt></a></p>
<p>Heavy Select2 Multiple Choice field.</p>
<dl class="attribute">
@ -392,21 +392,21 @@ be raised.</p>
<dl class="class">
<dt id="django_select2.fields.HeavyModelSelect2ChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavyModelSelect2ChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavyModelSelect2ChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavyModelSelect2ChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavyModelSelect2ChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavyModelSelect2ChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.QuerysetChoiceMixin" title="django_select2.fields.QuerysetChoiceMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.QuerysetChoiceMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavySelect2ChoiceField" title="django_select2.fields.HeavySelect2ChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2ChoiceField</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelChoiceField</span></tt></p>
<p>Heavy Select2 Choice field, specialized for Models.</p>
</dd></dl>
<dl class="class">
<dt id="django_select2.fields.HeavyModelSelect2MultipleChoiceField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavyModelSelect2MultipleChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.HeavyModelSelect2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">HeavyModelSelect2MultipleChoiceField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#HeavyModelSelect2MultipleChoiceField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.HeavyModelSelect2MultipleChoiceField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.QuerysetChoiceMixin" title="django_select2.fields.QuerysetChoiceMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.QuerysetChoiceMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavySelect2MultipleChoiceField" title="django_select2.fields.HeavySelect2MultipleChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2MultipleChoiceField</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelMultipleChoiceField</span></tt></p>
<p>Heavy Select2 Multiple Choice field, specialized for Models.</p>
</dd></dl>
<dl class="class">
<dt id="django_select2.fields.AutoSelect2Field">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoSelect2Field" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoSelect2Field"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoSelect2Field" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.AutoViewFieldMixin" title="django_select2.fields.AutoViewFieldMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.AutoViewFieldMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavySelect2ChoiceField" title="django_select2.fields.HeavySelect2ChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2ChoiceField</span></tt></a></p>
<p>Auto Heavy Select2 field.</p>
<p>This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming
@ -421,7 +421,7 @@ json query requests for that type (class).</p>
<dl class="class">
<dt id="django_select2.fields.AutoSelect2MultipleField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoSelect2MultipleField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoSelect2MultipleField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoSelect2MultipleField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.AutoViewFieldMixin" title="django_select2.fields.AutoViewFieldMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.AutoViewFieldMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavySelect2MultipleChoiceField" title="django_select2.fields.HeavySelect2MultipleChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavySelect2MultipleChoiceField</span></tt></a></p>
<p>Auto Heavy Select2 field for multiple choices.</p>
<p>This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming
@ -436,7 +436,7 @@ json query requests for that type (class).</p>
<dl class="class">
<dt id="django_select2.fields.AutoModelSelect2Field">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoModelSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoModelSelect2Field" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoModelSelect2Field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoModelSelect2Field"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoModelSelect2Field" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.ModelResultJsonMixin" title="django_select2.fields.ModelResultJsonMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelResultJsonMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.AutoViewFieldMixin" title="django_select2.fields.AutoViewFieldMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.AutoViewFieldMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavyModelSelect2ChoiceField" title="django_select2.fields.HeavyModelSelect2ChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavyModelSelect2ChoiceField</span></tt></a></p>
<p>Auto Heavy Select2 field, specialized for Models.</p>
<p>This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming
@ -451,7 +451,7 @@ json query requests for that type (class).</p>
<dl class="class">
<dt id="django_select2.fields.AutoModelSelect2MultipleField">
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoModelSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.fields.AutoModelSelect2MultipleField" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.fields.</tt><tt class="descname">AutoModelSelect2MultipleField</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/fields.html#AutoModelSelect2MultipleField"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.fields.AutoModelSelect2MultipleField" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.fields.ModelResultJsonMixin" title="django_select2.fields.ModelResultJsonMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.ModelResultJsonMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.AutoViewFieldMixin" title="django_select2.fields.AutoViewFieldMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.AutoViewFieldMixin</span></tt></a>, <a class="reference internal" href="#django_select2.fields.HeavyModelSelect2MultipleChoiceField" title="django_select2.fields.HeavyModelSelect2MultipleChoiceField"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.fields.HeavyModelSelect2MultipleChoiceField</span></tt></a></p>
<p>Auto Heavy Select2 field for multiple choices, specialized for Models.</p>
<p>This needs to be subclassed. The first instance of a class (sub-class) is used to serve all incoming

View file

@ -55,7 +55,7 @@
<span id="util"></span><h1>Util<a class="headerlink" href="#module-django_select2.util" title="Permalink to this headline"></a></h1>
<dl class="class">
<dt id="django_select2.util.JSVar">
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSVar</tt><a class="headerlink" href="#django_select2.util.JSVar" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSVar</tt><a class="reference internal" href="_modules/django_select2/util.html#JSVar"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.JSVar" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">unicode</span></tt></p>
<p>A JS variable.</p>
<p>This is a simple unicode string. This class type acts as a marker that this string is a JS variable name,
@ -64,7 +64,7 @@ so it must not be quoted by <a class="reference internal" href="#django_select2.
<dl class="class">
<dt id="django_select2.util.JSFunction">
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSFunction</tt><a class="headerlink" href="#django_select2.util.JSFunction" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSFunction</tt><a class="reference internal" href="_modules/django_select2/util.html#JSFunction"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.JSFunction" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.util.JSVar" title="django_select2.util.JSVar"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.util.JSVar</span></tt></a></p>
<p>A JS function name.</p>
<p>From rendering point of view, rendering this is no different from <a class="reference internal" href="#django_select2.util.JSVar" title="django_select2.util.JSVar"><tt class="xref py py-class docutils literal"><span class="pre">JSVar</span></tt></a>. After all, a JS varible
@ -78,7 +78,7 @@ understand.</p>
<dl class="class">
<dt id="django_select2.util.JSFunctionInContext">
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSFunctionInContext</tt><a class="headerlink" href="#django_select2.util.JSFunctionInContext" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.util.</tt><tt class="descname">JSFunctionInContext</tt><a class="reference internal" href="_modules/django_select2/util.html#JSFunctionInContext"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.JSFunctionInContext" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.util.JSVar" title="django_select2.util.JSVar"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.util.JSVar</span></tt></a></p>
<p>A JS function name to run in context of some other Html DOM element.</p>
<p>Like :py:class:JSFunction`, this too flags the string as JS function, but with a special requirement. The JS function
@ -92,7 +92,7 @@ needs to be invoked in the context of a Html DOM, such that, <tt class="docutils
<dl class="function">
<dt id="django_select2.util.render_js_script">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">render_js_script</tt><big>(</big><em>inner_code</em><big>)</big><a class="headerlink" href="#django_select2.util.render_js_script" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">render_js_script</tt><big>(</big><em>inner_code</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#render_js_script"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.render_js_script" title="Permalink to this definition"></a></dt>
<dd><p>This wraps <tt class="docutils literal"><span class="pre">inner_code</span></tt> string inside the following code block:</p>
<div class="highlight-python"><pre>&lt;script&gt;
$(function () {
@ -104,7 +104,7 @@ needs to be invoked in the context of a Html DOM, such that, <tt class="docutils
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></td>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
@ -112,19 +112,19 @@ needs to be invoked in the context of a Html DOM, such that, <tt class="docutils
<dl class="function">
<dt id="django_select2.util.extract_some_key_val">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">extract_some_key_val</tt><big>(</big><em>dct</em>, <em>keys</em><big>)</big><a class="headerlink" href="#django_select2.util.extract_some_key_val" title="Permalink to this definition"></a></dt>
<dd><p>Gets a sub-set of a <tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt>.</p>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">extract_some_key_val</tt><big>(</big><em>dct</em>, <em>keys</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#extract_some_key_val"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.extract_some_key_val" title="Permalink to this definition"></a></dt>
<dd><p>Gets a sub-set of a <a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a>.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>dct</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt>) &#8211; Source dictionary.</li>
<li><strong>keys</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or any iterable.) &#8211; List of subset keys, which to extract from <tt class="docutils literal"><span class="pre">dct</span></tt>.</li>
<li><strong>dct</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a>) &#8211; Source dictionary.</li>
<li><strong>keys</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or any iterable.) &#8211; List of subset keys, which to extract from <tt class="docutils literal"><span class="pre">dct</span></tt>.</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></p>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a></p>
</td>
</tr>
</tbody>
@ -133,7 +133,7 @@ needs to be invoked in the context of a Html DOM, such that, <tt class="docutils
<dl class="function">
<dt id="django_select2.util.convert_py_to_js_data">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_py_to_js_data</tt><big>(</big><em>val</em>, <em>id_</em><big>)</big><a class="headerlink" href="#django_select2.util.convert_py_to_js_data" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_py_to_js_data</tt><big>(</big><em>val</em>, <em>id_</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#convert_py_to_js_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.convert_py_to_js_data" title="Permalink to this definition"></a></dt>
<dd><p>Converts Python data type to JS data type.</p>
<p>Practically what this means is, convert <tt class="docutils literal"><span class="pre">False</span></tt> to <tt class="docutils literal"><span class="pre">false</span></tt>, <tt class="docutils literal"><span class="pre">True</span></tt> to <tt class="docutils literal"><span class="pre">true</span></tt> and so on.
It also takes care of the conversion of <a class="reference internal" href="#django_select2.util.JSVar" title="django_select2.util.JSVar"><tt class="xref py py-class docutils literal"><span class="pre">JSVar</span></tt></a>, <a class="reference internal" href="#django_select2.util.JSFunction" title="django_select2.util.JSFunction"><tt class="xref py py-class docutils literal"><span class="pre">JSFunction</span></tt></a>
@ -145,12 +145,12 @@ too.</p>
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>val</strong> (<em>Any</em>) &#8211; The Python data to convert.</li>
<li><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
<li><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
should run. (This is not needed if <tt class="docutils literal"><span class="pre">val</span></tt> contains no <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a>)</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -159,20 +159,20 @@ should run. (This is not needed if <tt class="docutils literal"><span class="pre
<dl class="function">
<dt id="django_select2.util.convert_dict_to_js_map">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_dict_to_js_map</tt><big>(</big><em>dct</em>, <em>id_</em><big>)</big><a class="headerlink" href="#django_select2.util.convert_dict_to_js_map" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_dict_to_js_map</tt><big>(</big><em>dct</em>, <em>id_</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#convert_dict_to_js_map"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.convert_dict_to_js_map" title="Permalink to this definition"></a></dt>
<dd><p>Converts a Python dictionary to JS map.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>dct</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt>) &#8211; The Python dictionary to convert.</li>
<li><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
<li><strong>dct</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a>) &#8211; The Python dictionary to convert.</li>
<li><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
should run. (This is not needed if <tt class="docutils literal"><span class="pre">dct</span></tt> contains no <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a>)</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -181,20 +181,20 @@ should run. (This is not needed if <tt class="docutils literal"><span class="pre
<dl class="function">
<dt id="django_select2.util.convert_to_js_arr">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_to_js_arr</tt><big>(</big><em>lst</em>, <em>id_</em><big>)</big><a class="headerlink" href="#django_select2.util.convert_to_js_arr" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_to_js_arr</tt><big>(</big><em>lst</em>, <em>id_</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#convert_to_js_arr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.convert_to_js_arr" title="Permalink to this definition"></a></dt>
<dd><p>Converts a Python list (or any iterable) to JS array.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>lst</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or Any iterable) &#8211; The Python iterable to convert.</li>
<li><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
<li><strong>lst</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or Any iterable) &#8211; The Python iterable to convert.</li>
<li><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; The DOM id of the element in which context <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a> functions
should run. (This is not needed if <tt class="docutils literal"><span class="pre">lst</span></tt> contains no <a class="reference internal" href="#django_select2.util.JSFunctionInContext" title="django_select2.util.JSFunctionInContext"><tt class="xref py py-class docutils literal"><span class="pre">JSFunctionInContext</span></tt></a>)</li>
</ul>
</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -203,7 +203,7 @@ should run. (This is not needed if <tt class="docutils literal"><span class="pre
<dl class="function">
<dt id="django_select2.util.convert_to_js_string_arr">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_to_js_string_arr</tt><big>(</big><em>lst</em><big>)</big><a class="headerlink" href="#django_select2.util.convert_to_js_string_arr" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">convert_to_js_string_arr</tt><big>(</big><em>lst</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#convert_to_js_string_arr"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.convert_to_js_string_arr" title="Permalink to this definition"></a></dt>
<dd><p>Converts a Python list (or any iterable) of strings to JS array.</p>
<p><a class="reference internal" href="#django_select2.util.convert_to_js_arr" title="django_select2.util.convert_to_js_arr"><tt class="xref py py-func docutils literal"><span class="pre">convert_to_js_arr()</span></tt></a> can always be used instead of this. However, since it
knows that it only contains strings, it cuts down on unnecessary computations.</p>
@ -211,7 +211,7 @@ knows that it only contains strings, it cuts down on unnecessary computations.</
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></td>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
@ -219,21 +219,21 @@ knows that it only contains strings, it cuts down on unnecessary computations.</
<dl class="function">
<dt id="django_select2.util.synchronized">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">synchronized</tt><big>(</big><em>f</em><big>)</big><a class="headerlink" href="#django_select2.util.synchronized" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">synchronized</tt><big>(</big><em>f</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#synchronized"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.synchronized" title="Permalink to this definition"></a></dt>
<dd><p>Decorator to synchronize multiple calls to a functions.</p>
</dd></dl>
<dl class="function">
<dt id="django_select2.util.is_valid_id">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">is_valid_id</tt><big>(</big><em>val</em><big>)</big><a class="headerlink" href="#django_select2.util.is_valid_id" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">is_valid_id</tt><big>(</big><em>val</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#is_valid_id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.is_valid_id" title="Permalink to this definition"></a></dt>
<dd><p>Checks if <tt class="docutils literal"><span class="pre">val</span></tt> is a valid generated Id.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>val</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; The value to check.</td>
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>val</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; The value to check.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-obj docutils literal"><span class="pre">bool</span></tt></td>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#bool" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">bool</span></tt></a></td>
</tr>
</tbody>
</table>
@ -241,14 +241,14 @@ knows that it only contains strings, it cuts down on unnecessary computations.</
<dl class="function">
<dt id="django_select2.util.register_field">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">register_field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.util.register_field" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">register_field</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#register_field"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.register_field" title="Permalink to this definition"></a></dt>
<dd><p>Registers an Auto field for use with <a class="reference internal" href="ref_views.html#django_select2.views.AutoResponseView" title="django_select2.views.AutoResponseView"><tt class="xref py py-class docutils literal"><span class="pre">views.AutoResponseView</span></tt></a>.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>key</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt>) &#8211; The key to use while registering this field.</li>
<li><strong>key</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a>) &#8211; The key to use while registering this field.</li>
<li><strong>field</strong> (<tt class="xref py py-class docutils literal"><span class="pre">AutoViewFieldMixin</span></tt>) &#8211; The field to register.</li>
</ul>
</td>
@ -257,7 +257,7 @@ knows that it only contains strings, it cuts down on unnecessary computations.</
Id generated that time, would be returned.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -266,13 +266,13 @@ Id generated that time, would be returned.</p>
<dl class="function">
<dt id="django_select2.util.get_field">
<tt class="descclassname">django_select2.util.</tt><tt class="descname">get_field</tt><big>(</big><em>id_</em><big>)</big><a class="headerlink" href="#django_select2.util.get_field" title="Permalink to this definition"></a></dt>
<tt class="descclassname">django_select2.util.</tt><tt class="descname">get_field</tt><big>(</big><em>id_</em><big>)</big><a class="reference internal" href="_modules/django_select2/util.html#get_field"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.util.get_field" title="Permalink to this definition"></a></dt>
<dd><p>Returns an Auto field instance registered with the given Id.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt>) &#8211; The generated Id the field is registered with.</td>
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a>) &#8211; The generated Id the field is registered with.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-class docutils literal"><span class="pre">AutoViewFieldMixin</span></tt> or None</td>
</tr>

View file

@ -66,7 +66,7 @@
<dl class="class">
<dt id="django_select2.views.JSONResponseMixin">
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">JSONResponseMixin</tt><a class="headerlink" href="#django_select2.views.JSONResponseMixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">JSONResponseMixin</tt><a class="reference internal" href="_modules/django_select2/views.html#JSONResponseMixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.JSONResponseMixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>A mixin that can be used to render a JSON response.</p>
<dl class="attribute">
@ -77,13 +77,13 @@
<dl class="method">
<dt id="django_select2.views.JSONResponseMixin.render_to_response">
<tt class="descname">render_to_response</tt><big>(</big><em>context</em>, <em>**response_kwargs</em><big>)</big><a class="headerlink" href="#django_select2.views.JSONResponseMixin.render_to_response" title="Permalink to this definition"></a></dt>
<tt class="descname">render_to_response</tt><big>(</big><em>context</em>, <em>**response_kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#JSONResponseMixin.render_to_response"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.JSONResponseMixin.render_to_response" title="Permalink to this definition"></a></dt>
<dd><p>Returns a JSON response, transforming &#8216;context&#8217; to make the payload.</p>
</dd></dl>
<dl class="method">
<dt id="django_select2.views.JSONResponseMixin.convert_context_to_json">
<tt class="descname">convert_context_to_json</tt><big>(</big><em>context</em><big>)</big><a class="headerlink" href="#django_select2.views.JSONResponseMixin.convert_context_to_json" title="Permalink to this definition"></a></dt>
<tt class="descname">convert_context_to_json</tt><big>(</big><em>context</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#JSONResponseMixin.convert_context_to_json"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.JSONResponseMixin.convert_context_to_json" title="Permalink to this definition"></a></dt>
<dd><p>Convert the context dictionary into a JSON object</p>
</dd></dl>
@ -91,8 +91,8 @@
<dl class="class">
<dt id="django_select2.views.Select2View">
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">Select2View</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.views.Select2View" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.views.JSONResponseMixin" title="django_select2.views.JSONResponseMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.views.JSONResponseMixin</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.base.View</span></tt></p>
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">Select2View</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#Select2View"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.Select2View" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.views.JSONResponseMixin" title="django_select2.views.JSONResponseMixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.views.JSONResponseMixin</span></tt></a>, <a class="reference external" href="http://docs.djangoproject.com/en/dev/ref/class-based-views/base/#django.views.generic.base.View" title="(in Django v1.5)"><tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.base.View</span></tt></a></p>
<p>Base view which is designed to respond with JSON to Ajax queries from heavy widgets/fields.</p>
<p>Although the widgets won&#8217;t enforce the type of data_view it gets, but it is recommended to
sub-class this view instead of creating a Django view from scratch.</p>
@ -102,7 +102,7 @@ sub-class this view instead of creating a Django view from scratch.</p>
</div>
<dl class="method">
<dt id="django_select2.views.Select2View.respond_with_exception">
<tt class="descname">respond_with_exception</tt><big>(</big><em>e</em><big>)</big><a class="headerlink" href="#django_select2.views.Select2View.respond_with_exception" title="Permalink to this definition"></a></dt>
<tt class="descname">respond_with_exception</tt><big>(</big><em>e</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#Select2View.respond_with_exception"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.Select2View.respond_with_exception" title="Permalink to this definition"></a></dt>
<dd><table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
@ -120,7 +120,7 @@ else 400.</td>
<dl class="method">
<dt id="django_select2.views.Select2View.check_all_permissions">
<tt class="descname">check_all_permissions</tt><big>(</big><em>request</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.views.Select2View.check_all_permissions" title="Permalink to this definition"></a></dt>
<tt class="descname">check_all_permissions</tt><big>(</big><em>request</em>, <em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#Select2View.check_all_permissions"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.Select2View.check_all_permissions" title="Permalink to this definition"></a></dt>
<dd><p>Sub-classes can use this to raise exception on permission check failures,
or these checks can be placed in <tt class="docutils literal"><span class="pre">urls.py</span></tt>, e.g. <tt class="docutils literal"><span class="pre">login_required(SelectClass.as_view())</span></tt>.</p>
<table class="docutils field-list" frame="void" rules="none">
@ -128,7 +128,7 @@ or these checks can be placed in <tt class="docutils literal"><span class="pre">
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>request</strong> (<tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt>) &#8211; The Ajax request object.</li>
<li><strong>request</strong> (<a class="reference external" href="http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest" title="(in Django v1.5)"><tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt></a>) &#8211; The Ajax request object.</li>
<li><strong>args</strong> &#8211; The <tt class="docutils literal"><span class="pre">*args</span></tt> passed to <tt class="xref py py-meth docutils literal"><span class="pre">django.views.generic.View.dispatch()</span></tt>.</li>
<li><strong>kwargs</strong> &#8211; The <tt class="docutils literal"><span class="pre">**kwargs</span></tt> passed to <tt class="xref py py-meth docutils literal"><span class="pre">django.views.generic.View.dispatch()</span></tt>.</li>
</ul>
@ -145,19 +145,19 @@ Http reqeusts to your server, be able to get access to sensitive information.</p
<dl class="method">
<dt id="django_select2.views.Select2View.get_results">
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="headerlink" href="#django_select2.views.Select2View.get_results" title="Permalink to this definition"></a></dt>
<tt class="descname">get_results</tt><big>(</big><em>request</em>, <em>term</em>, <em>page</em>, <em>context</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#Select2View.get_results"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.Select2View.get_results" title="Permalink to this definition"></a></dt>
<dd><p>Returns the result for the given search <tt class="docutils literal"><span class="pre">term</span></tt>.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>request</strong> (<tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt>) &#8211; The Ajax request object.</li>
<li><strong>term</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; The search term.</li>
<li><strong>page</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">int</span></tt>) &#8211; The page number. If in your last response you had signalled that there are more results,
<li><strong>request</strong> (<a class="reference external" href="http://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest" title="(in Django v1.5)"><tt class="xref py py-class docutils literal"><span class="pre">django.http.HttpRequest</span></tt></a>) &#8211; The Ajax request object.</li>
<li><strong>term</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; The search term.</li>
<li><strong>page</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#int" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">int</span></tt></a>) &#8211; The page number. If in your last response you had signalled that there are more results,
then when user scrolls more a new Ajax request would be sent for the same term but with next page
number. (Page number starts at 1)</li>
<li><strong>context</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt> or None) &#8211; <p>Can be anything which persists across the lifecycle of queries for the same search term.
<li><strong>context</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a> or None) &#8211; <p>Can be anything which persists across the lifecycle of queries for the same search term.
It is reset to <tt class="docutils literal"><span class="pre">None</span></tt> when the term changes.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
@ -190,7 +190,7 @@ It is reset to <tt class="docutils literal"><span class="pre">None</span></tt> w
<dl class="class">
<dt id="django_select2.views.AutoResponseView">
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">AutoResponseView</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.views.AutoResponseView" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.views.</tt><tt class="descname">AutoResponseView</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/views.html#AutoResponseView"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.views.AutoResponseView" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.views.Select2View" title="django_select2.views.Select2View"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.views.Select2View</span></tt></a></p>
<p>A central view meant to respond to Ajax queries for all Heavy widgets/fields.
Although it is not mandatory to use, but is immensely helpful.</p>

View file

@ -60,7 +60,7 @@
<p>Contains all the Django widgets for Select2.</p>
<dl class="class">
<dt id="django_select2.widgets.Select2Mixin">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2Mixin</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2Mixin</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>The base mixin of all Select2 widgets.</p>
<p>This mixin is responsible for rendering the necessary Javascript and CSS codes which turns normal <tt class="docutils literal"><span class="pre">&lt;select&gt;</span></tt>
@ -81,14 +81,14 @@ markups into Select2 choice list.</p>
</div>
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.__init__">
<tt class="descname">__init__</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.__init__" title="Permalink to this definition"></a></dt>
<tt class="descname">__init__</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Constructor of the class.</p>
<p>The following additional kwarg is allowed:-</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>select2_options</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt> or None) &#8211; <p>This is similar to standard Django way to pass extra attributes to widgets.
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>select2_options</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a> or None) &#8211; <p>This is similar to standard Django way to pass extra attributes to widgets.
This is meant to override values of existing <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">options</span></tt></a>.</p>
<p>Example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">class</span> <span class="nc">MyForm</span><span class="p">(</span><span class="n">ModelForm</span><span class="p">):</span>
@ -127,7 +127,7 @@ The complete description of theses options are available in <a class="reference
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.init_options">
<tt class="descname">init_options</tt><big>(</big><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.init_options" title="Permalink to this definition"></a></dt>
<tt class="descname">init_options</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.init_options"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.init_options" title="Permalink to this definition"></a></dt>
<dd><p>Sub-classes can use this to pass additional options to Select2 JS library.</p>
<p>Example:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">init_options</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -146,21 +146,28 @@ use <a class="reference internal" href="ref_util.html#django_select2.util.JSFunc
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.set_placeholder">
<tt class="descname">set_placeholder</tt><big>(</big><em>val</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.set_placeholder" title="Permalink to this definition"></a></dt>
<dd><p>Placeholder is a value which Select2 JS library shows when nothing is selected. This should be string.
:return: None</p>
<tt class="descname">set_placeholder</tt><big>(</big><em>val</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.set_placeholder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.set_placeholder" title="Permalink to this definition"></a></dt>
<dd><p>Placeholder is a value which Select2 JS library shows when nothing is selected. This should be string.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">None</td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.get_options">
<tt class="descname">get_options</tt><big>(</big><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.get_options" title="Permalink to this definition"></a></dt>
<tt class="descname">get_options</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.get_options"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.get_options" title="Permalink to this definition"></a></dt>
<dd><table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">Dictionary of options to be passed to Select2 JS.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></td>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/stdtypes.html#dict" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">dict</span></tt></a></td>
</tr>
</tbody>
</table>
@ -168,41 +175,73 @@ use <a class="reference internal" href="ref_util.html#django_select2.util.JSFunc
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.render_select2_options_code">
<tt class="descname">render_select2_options_code</tt><big>(</big><em>options</em>, <em>id_</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_select2_options_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders options for Select2 JS.
:return: The rendered JS code.
:rtype: <tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tt class="descname">render_select2_options_code</tt><big>(</big><em>options</em>, <em>id_</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.render_select2_options_code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_select2_options_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders options for Select2 JS.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">The rendered JS code.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.render_js_code">
<tt class="descname">render_js_code</tt><big>(</big><em>id_</em>, <em>*args</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_js_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block which contains the JS code for this widget.
:return: The rendered JS code enclosed inside <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block.
:rtype: <tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tt class="descname">render_js_code</tt><big>(</big><em>id_</em>, <em>*args</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.render_js_code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_js_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders the <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block which contains the JS code for this widget.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">The rendered JS code enclosed inside <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.render_inner_js_code">
<tt class="descname">render_inner_js_code</tt><big>(</big><em>id_</em>, <em>*args</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_inner_js_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders all the JS code required for this widget.
:return: The rendered JS code which will be later enclosed inside <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block.
:rtype: <tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tt class="descname">render_inner_js_code</tt><big>(</big><em>id_</em>, <em>*args</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.render_inner_js_code"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render_inner_js_code" title="Permalink to this definition"></a></dt>
<dd><p>Renders all the JS code required for this widget.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">The rendered JS code which will be later enclosed inside <tt class="docutils literal"><span class="pre">&lt;script&gt;</span></tt> block.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
</dd></dl>
<dl class="method">
<dt id="django_select2.widgets.Select2Mixin.render">
<tt class="descname">render</tt><big>(</big><em>name</em>, <em>value</em>, <em>attrs=None</em>, <em>choices=()</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render" title="Permalink to this definition"></a></dt>
<dd><p>Renders this widget. Html and JS code blocks all are rendered by this.
:return: The rendered markup.
:rtype: <tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tt class="descname">render</tt><big>(</big><em>name</em>, <em>value</em>, <em>attrs=None</em>, <em>choices=()</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Mixin.render"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Mixin.render" title="Permalink to this definition"></a></dt>
<dd><p>Renders this widget. Html and JS code blocks all are rendered by this.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">The rendered markup.</td>
</tr>
<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></td>
</tr>
</tbody>
</table>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="django_select2.widgets.Select2Widget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2Widget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2Widget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2Widget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.Select2Mixin" title="django_select2.widgets.Select2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.Select2Mixin</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django.forms.widgets.Select</span></tt></p>
<p>Drop-in Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.Select</span></tt>.</p>
<p>Following Select2 option from <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">Select2Mixin.options</span></tt></a> is removed:-</p>
@ -215,7 +254,7 @@ use <a class="reference internal" href="ref_util.html#django_select2.util.JSFunc
<dl class="class">
<dt id="django_select2.widgets.Select2MultipleWidget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.Select2MultipleWidget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">Select2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#Select2MultipleWidget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.Select2MultipleWidget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.Select2Mixin" title="django_select2.widgets.Select2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.Select2Mixin</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django.forms.widgets.SelectMultiple</span></tt></p>
<p>Drop-in Select2 replacement for <tt class="xref py py-class docutils literal"><span class="pre">forms.SelectMultiple</span></tt>.</p>
<p>Following Select2 options from <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">Select2Mixin.options</span></tt></a> are removed:-</p>
@ -230,7 +269,7 @@ use <a class="reference internal" href="ref_util.html#django_select2.util.JSFunc
<dl class="class">
<dt id="django_select2.widgets.MultipleSelect2HiddenInput">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">MultipleSelect2HiddenInput</tt><big>(</big><em>attrs=None</em><big>)</big><a class="headerlink" href="#django_select2.widgets.MultipleSelect2HiddenInput" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">MultipleSelect2HiddenInput</tt><big>(</big><em>attrs=None</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#MultipleSelect2HiddenInput"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.MultipleSelect2HiddenInput" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">django.forms.widgets.TextInput</span></tt></p>
<p>Multiple hidden input for Select2.</p>
<p>This is a specialized multiple Hidden Input widget. This includes a special
@ -245,7 +284,7 @@ would be available as list.</p>
<dl class="class">
<dt id="django_select2.widgets.HeavySelect2Mixin">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2Mixin</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2Mixin</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2Mixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.Select2Mixin" title="django_select2.widgets.Select2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.Select2Mixin</span></tt></a></p>
<p>The base mixin of all Heavy Select2 widgets. It sub-classes <a class="reference internal" href="#django_select2.widgets.Select2Mixin" title="django_select2.widgets.Select2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">Select2Mixin</span></tt></a>.</p>
<p>This mixin adds more Select2 options to <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">Select2Mixin.options</span></tt></a>. These are:-</p>
@ -274,7 +313,7 @@ would be available as list.</p>
</div>
<dl class="method">
<dt id="django_select2.widgets.HeavySelect2Mixin.__init__">
<tt class="descname">__init__</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.__init__" title="Permalink to this definition"></a></dt>
<tt class="descname">__init__</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2Mixin.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Constructor of the class.</p>
<p>The following kwargs are allowed:-</p>
<table class="docutils field-list" frame="void" rules="none">
@ -283,7 +322,7 @@ would be available as list.</p>
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>data_view</strong> (<tt class="xref py py-class docutils literal"><span class="pre">django.views.generic.View</span></tt> or None) &#8211; A <a class="reference internal" href="ref_views.html#django_select2.views.Select2View" title="django_select2.views.Select2View"><tt class="xref py py-class docutils literal"><span class="pre">Select2View</span></tt></a> sub-class which can respond to this widget&#8217;s Ajax queries.</li>
<li><strong>data_url</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt> or None) &#8211; Url which will respond to Ajax queries with JSON object.</li>
<li><strong>data_url</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a> or None) &#8211; Url which will respond to Ajax queries with JSON object.</li>
</ul>
</td>
</tr>
@ -292,7 +331,7 @@ would be available as list.</p>
<div class="admonition tip">
<p class="first admonition-title">Tip</p>
<p class="last">When <tt class="docutils literal"><span class="pre">data_view</span></tt> is provided then it is converted into Url using
<tt class="xref py py-func docutils literal"><span class="pre">reverse()</span></tt>.</p>
<a class="reference external" href="http://docs.djangoproject.com/en/dev/topics/http/urls/#django.core.urlresolvers.reverse" title="(in Django v1.5)"><tt class="xref py py-func docutils literal"><span class="pre">reverse()</span></tt></a>.</p>
</div>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
@ -304,7 +343,7 @@ be raised.</p>
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
<li><strong>choices</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or <tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt>) &#8211; The list of available choices. If not provided then empty list is used instead. It
<li><strong>choices</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or <a class="reference external" href="http://docs.python.org/2.7/library/functions.html#tuple" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt></a>) &#8211; The list of available choices. If not provided then empty list is used instead. It
should be of the form &#8211; <tt class="docutils literal"><span class="pre">[(val1,</span> <span class="pre">'Label1'),</span> <span class="pre">(val2,</span> <span class="pre">'Label2'),</span> <span class="pre">...]</span></tt>.</li>
<li><strong>userGetValTextFuncName</strong> &#8211; <p>The name of the custom JS function which you want to use to convert
value to label.</p>
@ -330,15 +369,15 @@ when browser is closed.</p>
<dl class="method">
<dt id="django_select2.widgets.HeavySelect2Mixin.render_texts">
<tt class="descname">render_texts</tt><big>(</big><em>selected_choices</em>, <em>choices</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.render_texts" title="Permalink to this definition"></a></dt>
<tt class="descname">render_texts</tt><big>(</big><em>selected_choices</em>, <em>choices</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2Mixin.render_texts"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.render_texts" title="Permalink to this definition"></a></dt>
<dd><p>Renders a JS array with labels for the <tt class="docutils literal"><span class="pre">selected_choices</span></tt>.</p>
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>selected_choices</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or <tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt>) &#8211; List of selected choices&#8217; values.</li>
<li><strong>choices</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or <tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
<li><strong>selected_choices</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or <a class="reference external" href="http://docs.python.org/2.7/library/functions.html#tuple" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt></a>) &#8211; List of selected choices&#8217; values.</li>
<li><strong>choices</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or <a class="reference external" href="http://docs.python.org/2.7/library/functions.html#tuple" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt></a>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
item is the choice value and the second item is choice label.</li>
</ul>
</td>
@ -346,7 +385,7 @@ item is the choice value and the second item is choice label.</li>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">The rendered JS array code.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -355,7 +394,7 @@ item is the choice value and the second item is choice label.</li>
<dl class="method">
<dt id="django_select2.widgets.HeavySelect2Mixin.render_texts_for_value">
<tt class="descname">render_texts_for_value</tt><big>(</big><em>id_</em>, <em>value</em>, <em>choices</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.render_texts_for_value" title="Permalink to this definition"></a></dt>
<tt class="descname">render_texts_for_value</tt><big>(</big><em>id_</em>, <em>value</em>, <em>choices</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2Mixin.render_texts_for_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2Mixin.render_texts_for_value" title="Permalink to this definition"></a></dt>
<dd><p>Renders the JS code which sets the <tt class="docutils literal"><span class="pre">txt</span></tt> attribute on the field. It gets the array
of lables from <a class="reference internal" href="#django_select2.widgets.HeavySelect2Mixin.render_texts" title="django_select2.widgets.HeavySelect2Mixin.render_texts"><tt class="xref py py-meth docutils literal"><span class="pre">render_texts()</span></tt></a>.</p>
<table class="docutils field-list" frame="void" rules="none">
@ -363,9 +402,9 @@ of lables from <a class="reference internal" href="#django_select2.widgets.Heavy
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; Id of the field. This can be used to get reference of this field&#8217;s DOM in JS.</li>
<li><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; Id of the field. This can be used to get reference of this field&#8217;s DOM in JS.</li>
<li><strong>value</strong> (<em>Any</em>) &#8211; Currently set value on the field.</li>
<li><strong>choices</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or <tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
<li><strong>choices</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or <a class="reference external" href="http://docs.python.org/2.7/library/functions.html#tuple" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt></a>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
item is the choice value and the second item is choice label.</li>
</ul>
</td>
@ -373,7 +412,7 @@ item is the choice value and the second item is choice label.</li>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">JS code which sets the <tt class="docutils literal"><span class="pre">txt</span></tt> attribute.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -384,7 +423,7 @@ item is the choice value and the second item is choice label.</li>
<dl class="class">
<dt id="django_select2.widgets.HeavySelect2Widget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2Widget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2Widget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2Widget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.HeavySelect2Mixin" title="django_select2.widgets.HeavySelect2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.HeavySelect2Mixin</span></tt></a>, <tt class="xref py py-class docutils literal"><span class="pre">django.forms.widgets.TextInput</span></tt></p>
<p>Single selection heavy widget.</p>
<p>Following Select2 option from <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">Select2Mixin.options</span></tt></a> is added or set:-</p>
@ -397,7 +436,7 @@ item is the choice value and the second item is choice label.</li>
<dl class="class">
<dt id="django_select2.widgets.HeavySelect2MultipleWidget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2MultipleWidget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">HeavySelect2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2MultipleWidget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2MultipleWidget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.HeavySelect2Mixin" title="django_select2.widgets.HeavySelect2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.HeavySelect2Mixin</span></tt></a>, <a class="reference internal" href="#django_select2.widgets.MultipleSelect2HiddenInput" title="django_select2.widgets.MultipleSelect2HiddenInput"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.MultipleSelect2HiddenInput</span></tt></a></p>
<p>Multiple selection heavy widget.</p>
<p>Following Select2 options from <a class="reference internal" href="#django_select2.widgets.Select2Mixin.options" title="django_select2.widgets.Select2Mixin.options"><tt class="xref py py-attr docutils literal"><span class="pre">Select2Mixin.options</span></tt></a> are removed:-</p>
@ -416,7 +455,7 @@ item is the choice value and the second item is choice label.</li>
</div></blockquote>
<dl class="method">
<dt id="django_select2.widgets.HeavySelect2MultipleWidget.render_texts_for_value">
<tt class="descname">render_texts_for_value</tt><big>(</big><em>id_</em>, <em>value</em>, <em>choices</em><big>)</big><a class="headerlink" href="#django_select2.widgets.HeavySelect2MultipleWidget.render_texts_for_value" title="Permalink to this definition"></a></dt>
<tt class="descname">render_texts_for_value</tt><big>(</big><em>id_</em>, <em>value</em>, <em>choices</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#HeavySelect2MultipleWidget.render_texts_for_value"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.HeavySelect2MultipleWidget.render_texts_for_value" title="Permalink to this definition"></a></dt>
<dd><p>Renders the JS code which sets the <tt class="docutils literal"><span class="pre">txt</span></tt> attribute on the field. It gets the array
of lables from <a class="reference internal" href="#django_select2.widgets.HeavySelect2Mixin.render_texts" title="django_select2.widgets.HeavySelect2Mixin.render_texts"><tt class="xref py py-meth docutils literal"><span class="pre">render_texts()</span></tt></a>.</p>
<table class="docutils field-list" frame="void" rules="none">
@ -424,9 +463,9 @@ of lables from <a class="reference internal" href="#django_select2.widgets.Heavy
<col class="field-body" />
<tbody valign="top">
<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
<li><strong>id</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt>) &#8211; Id of the field. This can be used to get reference of this field&#8217;s DOM in JS.</li>
<li><strong>value</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt>) &#8211; <strong>List</strong> of currently set value on the field.</li>
<li><strong>choices</strong> (<tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt> or <tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
<li><strong>id</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#str" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">str</span></tt></a>) &#8211; Id of the field. This can be used to get reference of this field&#8217;s DOM in JS.</li>
<li><strong>value</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a>) &#8211; <strong>List</strong> of currently set value on the field.</li>
<li><strong>choices</strong> (<a class="reference external" href="http://docs.python.org/2.7/library/functions.html#list" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">list</span></tt></a> or <a class="reference external" href="http://docs.python.org/2.7/library/functions.html#tuple" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">tuple</span></tt></a>) &#8211; Extra choices, if any. This is a list of tuples. In each tuple, the first
item is the choice value and the second item is choice label.</li>
</ul>
</td>
@ -434,7 +473,7 @@ item is the choice value and the second item is choice label.</li>
<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><p class="first">JS code which sets the <tt class="docutils literal"><span class="pre">txt</span></tt> attribute.</p>
</td>
</tr>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></p>
<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><p class="first last"><a class="reference external" href="http://docs.python.org/2.7/library/functions.html#unicode" title="(in Python v2.7)"><tt class="xref py py-obj docutils literal"><span class="pre">unicode</span></tt></a></p>
</td>
</tr>
</tbody>
@ -445,7 +484,7 @@ item is the choice value and the second item is choice label.</li>
<dl class="class">
<dt id="django_select2.widgets.AutoHeavySelect2Mixin">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2Mixin</tt><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2Mixin" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2Mixin</tt><a class="reference internal" href="_modules/django_select2/widgets.html#AutoHeavySelect2Mixin"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2Mixin" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p>
<p>This mixin is needed for Auto heavy fields.</p>
<p>This mxin adds extra JS code to notify the field&#8217;s DOM object of the generated id. The generated id
@ -457,14 +496,14 @@ serve the request.</p>
<dl class="class">
<dt id="django_select2.widgets.AutoHeavySelect2Widget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2Widget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2Widget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#AutoHeavySelect2Widget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2Widget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.AutoHeavySelect2Mixin" title="django_select2.widgets.AutoHeavySelect2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.AutoHeavySelect2Mixin</span></tt></a>, <a class="reference internal" href="#django_select2.widgets.HeavySelect2Widget" title="django_select2.widgets.HeavySelect2Widget"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.HeavySelect2Widget</span></tt></a></p>
<p>Auto version of <a class="reference internal" href="#django_select2.widgets.HeavySelect2Widget" title="django_select2.widgets.HeavySelect2Widget"><tt class="xref py py-class docutils literal"><span class="pre">HeavySelect2Widget</span></tt></a></p>
</dd></dl>
<dl class="class">
<dt id="django_select2.widgets.AutoHeavySelect2MultipleWidget">
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2MultipleWidget" title="Permalink to this definition"></a></dt>
<em class="property">class </em><tt class="descclassname">django_select2.widgets.</tt><tt class="descname">AutoHeavySelect2MultipleWidget</tt><big>(</big><em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/django_select2/widgets.html#AutoHeavySelect2MultipleWidget"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#django_select2.widgets.AutoHeavySelect2MultipleWidget" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#django_select2.widgets.AutoHeavySelect2Mixin" title="django_select2.widgets.AutoHeavySelect2Mixin"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.AutoHeavySelect2Mixin</span></tt></a>, <a class="reference internal" href="#django_select2.widgets.HeavySelect2MultipleWidget" title="django_select2.widgets.HeavySelect2MultipleWidget"><tt class="xref py py-class docutils literal"><span class="pre">django_select2.widgets.HeavySelect2MultipleWidget</span></tt></a></p>
<p>Auto version of <a class="reference internal" href="#django_select2.widgets.HeavySelect2MultipleWidget" title="django_select2.widgets.HeavySelect2MultipleWidget"><tt class="xref py py-class docutils literal"><span class="pre">HeavySelect2MultipleWidget</span></tt></a></p>
</dd></dl>

File diff suppressed because one or more lines are too long

Binary file not shown.

View file

@ -30,12 +30,32 @@ class DeptForm(forms.ModelForm):
class Meta:
model = Dept
class SelfChoices(AutoSelect2Field):
def get_results(self, request, term, page, context):
res = []
for i in range(1, 6):
res.append((i, term * i,))
self.choices = res
return (NO_ERR_RESP, False, res)
class SelfMultiChoices(AutoSelect2MultipleField):
def get_results(self, request, term, page, context):
res = []
for i in range(1, 6):
res.append((i, term * i,))
self.choices = res
return (NO_ERR_RESP, False, res)
class MixedForm(forms.Form):
emp1 = EmployeeChoices()
rooms1 = ClassRoomChoices()
emp2 = EmployeeChoices()
rooms2 = ClassRoomChoices()
rooms3 = ClassRoomSingleChoices()
self_choices = SelfChoices(label='Self copy choices')
self_multi_choices = SelfMultiChoices(label='Self copy multi-choices')
# These are just for testing Auto registration of fields
EmployeeChoices() # Should already be registered

View file

@ -44,7 +44,12 @@ def test_multi_values_model_field1(request, id):
return render_to_response('form.html', RequestContext(request, {'form': form}))
def test_mixed_form(request):
return render_to_response('form.html', RequestContext(request, {'form': MixedForm()}))
if request.POST:
form = MixedForm(request.POST)
form.is_valid()
else:
form = MixedForm()
return render_to_response('form.html', RequestContext(request, {'form': form}))
def test_init_values(request):