【问题标题】:In django, how do I use a select2 widget for a manytomanyfield?在 django 中,如何将 select2 小部件用于多字段?
【发布时间】:2015-11-10 22:03:37
【问题描述】:

我想在 django 中使用 select2 小部件来处理 manytomanyfield。有几个 django/select2 模块,但是文档很混乱,我找不到我想要的简单示例。感谢您的帮助。

【问题讨论】:

  • django-select2-forms 非常简单。

标签: django


【解决方案1】:

好的起点是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

将映射到此处显示的具有多对多关系类型的 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>

【讨论】:

  • 必须在哪里编辑这个模板,
【解决方案2】:

在 Django >= 2.0 中,

新的 ModelAdmin.autocomplete_fields 属性和 ModelAdmin.get_autocomplete_fields() 方法允许使用 Select2 ForeignKey 和 ManyToManyField 的搜索小部件。

来源:https://docs.djangoproject.com/en/2.0/releases/2.0/#minor-features

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 2021-09-06
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2017-12-30
    • 2020-08-07
    • 2013-09-28
    • 2012-10-28
    相关资源
    最近更新 更多