我想在django中为manytomanyfield使用select2小部件。有几个django / select2模块,但文档很混乱,我找不到我想要的简单示例。谢谢你的帮助。
答案 0 :(得分:9)
开始的好地方是django-select2,他们也有很好的工作example。
在这里,我只是在他们的例子
的背景下找出主要想法模型
@python_2_unicode_compatible
class Album(models.Model):
title = models.CharField(max_length=255)
artist = models.ForeignKey(Artist)
featured_artists = models.ManyToManyField(Artist, blank=True, related_name='featured_album_set')
primary_genre = models.ForeignKey(Genre, blank=True, null=True, related_name='primary_album_set')
genres = models.ManyToManyField(Genre)
def __str__(self):
return self.title
将使用ManyToMany关系类型将这些字段映射到此处显示的select2。
形式
class AlbumSelect2WidgetForm(forms.ModelForm):
class Meta:
model = models.Album
fields = (
'artist',
'primary_genre',
)
widgets = {
'artist': Select2Widget,
'primary_genre': Select2Widget,
}
如果需要,可以很容易地自定义Select2Widget。
最后的 - html部分
{% load staticfiles %}
<!DOCTYPE html>
<html>
<head>
{{ form.media.css }}
<style type="text/css">
select {
width: 200px;
}
</style>
</head>
<body>
<form method="post" action="">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit Form"/>
</form>
<script src="{% static '//code.jquery.com/jquery-2.1.4.min.js' %}"></script>
<script type="text/javascript">
window.onerror = function (msg) {
$("body").attr("JSError", msg);
}
</script>
{{ form.media.js }}
</body>
答案 1 :(得分:5)
在Django&gt; = 2.0,
新的ModelAdmin.autocomplete_fields属性和 ModelAdmin.get_autocomplete_fields()方法允许使用Select2 ForeignKey和ManyToManyField的搜索小部件。
来源:https://docs.djangoproject.com/en/2.0/releases/2.0/#minor-features