如何在 Django 中创建多个 Select 框?
How create Multiple Select Box in Django?
我正在尝试从 Django Select 2 库中创建 多个 Select 框 字段,如下图所示?我使用了下一个代码,但它 return 简单 select 多个小部件。我想我忘了补充一些东西。我的错误在哪里?有人可以告诉我如何正确创建这样的字段吗?
我使用:
django-select-2版本:5.1.0
JQuery版本:3.1.1
forms.py:
class ProductForm(forms.ModelForm):
company = forms.ModelMultipleChoiceField(queryset=Company.objects.none())
class Meta:
model = Product
fields = ('company ',)
widgets = {
'company': Select2MultipleWidget()
}
def __init__(self, all_companies, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['company'].queryset = all_companies
模板:
{% block style %}
{{ form.media.css }}
{% endblock %}
{% load widget_tweaks %}
<form method="post" action="">
{% csrf_token %}
<div class="modal-body">
{% for field in product_form %}
<div class="form-group{% if field.errors %} has-danger{% endif %}">
<label class="form-control-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" %}
{% for error in field.errors %}
<div class="form-control-feedback">{{ error }}</div>
{% endfor %}
</div>
{% endfor %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Create</button>
</div>
</form>
{% block script %}
{{ form.media.js }}
{% endblock %}
JS:
$(function () {
var loadForm = function () {
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType: 'json',
beforeSend: function () {
$('#id_company').djangoSelect2({multiple: true});
$("#modal").modal("show");
},
success: function (data) {
$("#modal .modal-content").html(data.html_product_form);
}
});
};
$("#product-add-button").click(loadForm);
});
这是一个主意。我认为你需要用 Django-Select2 提供的 jquery 插件自己初始化它。在 Django-Select2 docs and the Select2 docs 之后,您可能需要执行以下操作:
$('.django-select2').djangoSelect2({multiple: true});
终于找到解决办法了。我的问题是我通过 AJAX 加载了我的表单。这就是 {{ product_form.media.js }}
和 {{ product_form.media.css }}
不起作用的原因。
我在模板中使用了 {{ product_form.media.js }}
和 {{ product_form.media.css }}
:
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">
<script src="{% static 'django_select2/django_select2.js' %}"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
我正在尝试从 Django Select 2 库中创建 多个 Select 框 字段,如下图所示?我使用了下一个代码,但它 return 简单 select 多个小部件。我想我忘了补充一些东西。我的错误在哪里?有人可以告诉我如何正确创建这样的字段吗?
我使用:
django-select-2版本:5.1.0
JQuery版本:3.1.1
forms.py:
class ProductForm(forms.ModelForm):
company = forms.ModelMultipleChoiceField(queryset=Company.objects.none())
class Meta:
model = Product
fields = ('company ',)
widgets = {
'company': Select2MultipleWidget()
}
def __init__(self, all_companies, *args, **kwargs):
super(ProductForm, self).__init__(*args, **kwargs)
self.fields['company'].queryset = all_companies
模板:
{% block style %}
{{ form.media.css }}
{% endblock %}
{% load widget_tweaks %}
<form method="post" action="">
{% csrf_token %}
<div class="modal-body">
{% for field in product_form %}
<div class="form-group{% if field.errors %} has-danger{% endif %}">
<label class="form-control-label" for="{{ field.id_for_label }}">{{ field.label }}</label>
{% render_field field class="form-control" %}
{% for error in field.errors %}
<div class="form-control-feedback">{{ error }}</div>
{% endfor %}
</div>
{% endfor %}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Create</button>
</div>
</form>
{% block script %}
{{ form.media.js }}
{% endblock %}
JS:
$(function () {
var loadForm = function () {
var btn = $(this);
$.ajax({
url: btn.attr("data-url"),
type: 'get',
dataType: 'json',
beforeSend: function () {
$('#id_company').djangoSelect2({multiple: true});
$("#modal").modal("show");
},
success: function (data) {
$("#modal .modal-content").html(data.html_product_form);
}
});
};
$("#product-add-button").click(loadForm);
});
这是一个主意。我认为你需要用 Django-Select2 提供的 jquery 插件自己初始化它。在 Django-Select2 docs and the Select2 docs 之后,您可能需要执行以下操作:
$('.django-select2').djangoSelect2({multiple: true});
终于找到解决办法了。我的问题是我通过 AJAX 加载了我的表单。这就是 {{ product_form.media.js }}
和 {{ product_form.media.css }}
不起作用的原因。
我在模板中使用了 {{ product_form.media.js }}
和 {{ product_form.media.css }}
:
<link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css">
<script src="{% static 'django_select2/django_select2.js' %}"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>