在Django中Admin之外使用filter_horizo​​ntal最简单的方法

rh0*_*ium 10 django django-templates django-forms

我有一个非管理员表单,我想在其中使用filter_horizo​​ntal.我读过这个比我想要的更多(我只想要filter_horizo​​ntal).我想检查是否有人想出一个更简单(更新)的方法来实现filter_horizo​​ntal.

所以这是代码:

class County(models.Model):
    """County Names"""
    name = models.CharField(max_length=64)
    state = USStateField(null=True)

class Company(models.Model):
    """The basics of a company"""
    name = models.CharField(max_length = 100)
    counties = models.ManyToManyField(County,blank=True, null=True)
Run Code Online (Sandbox Code Playgroud)

然后我们的表单目前看起来像这样.我以为这会起作用..

from django.contrib.admin.widgets import FilteredSelectMultiple
class RaterCompanyForm(ModelForm):
    class Meta:
        model = RaterOrganization
        exclude = ('remrate_projects',)
        widgets = {'counties': FilteredSelectMultiple(verbose_name="Counties",
                                                      is_stacked=True,) }
    class Media:
        css = {'all':['admin/css/widgets.css']}
        js = ['/admin/jsi18n/']
Run Code Online (Sandbox Code Playgroud)

顺便说一句:我知道这可能与重复,但他的问题没有得到解答.我在这里这里做了很多功课,但这些都没有起作用.

Sup*_*key 13

我知道这个帖子已经过时了,但希望这些信息可以帮助那些偶然发现这个页面的人.

在经历了很多痛苦和痛苦之后,我能够使用Django 1.4.像rh0dium一样,我尝试了所有这些文章,但不得不进行大量的调整.

您不必对ModelForm执行任何特殊操作,但您必须在模板中包含所有这些js和css文件:

<script type="text/javascript" src="/admin/jsi18n/"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/core.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.min.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/jquery.init.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/SelectFilter2.js"></script>
<script type="text/javascript" src="{{ STATIC_URL }}admin/js/SelectBox.js"></script>

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/widgets.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/base.css"/>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}admin/css/forms.css"/>
Run Code Online (Sandbox Code Playgroud)

然后像往常一样渲染表单,但是你需要获得正确的字段集元素和类名才能使css工作.例如:

<fieldset>
    <div class="form-row">
        <form method="post" action=".">
            {% csrf_token %}
            {{ form.as_p }}
        <button type="submit" value="submit">Add</button>
    </form>
  </div>
</fieldset>
Run Code Online (Sandbox Code Playgroud)

然后在模板的BOTTOM处(在标记之后渲染表单),添加此脚本并将pricetags替换为模型表单模型上的多对多(M2M)关系名称:

<script type="text/javascript">
    addEvent(window, "load", function(e) { SelectFilter.init("id_pricetags", "pricetags", 0, "{{ STATIC_URL }}admin/"); });
</script>
Run Code Online (Sandbox Code Playgroud)

显然,您的媒体位置可能有所不同,但{{STATIC_URL}} admin /为我工作.