Какой самый простой способ использовать фильтр_горизонтальный вне администратора в Django - PullRequest
10 голосов
/ 15 октября 2011

У меня есть форма без прав администратора, в которой я хотел бы использовать фильтр_горизонтальный.Я прочитал this , который делает гораздо больше, чем я хочу (я хочу только filter_hor Horizontal).Я хотел проверить, не нашел ли кто-нибудь более простой (более актуальный) способ просто реализовать filter_hor horizontal.

Так вот код:

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)

Тогда наша форма в настоящее времявыглядеть такЯ подумал, что это сработаетЯ сделал много домашней работы здесь и здесь , но ни один из них, похоже, не работает.

1 Ответ

13 голосов
/ 02 апреля 2013

Я знаю, что эта ветка старая, но, надеюсь, эта информация поможет кому-то еще, кто наткнется на эту страницу, как я.

После долгих болей и страданий я смог заставить это работать с 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"/>

Затем визуализируйте форму, как обычно, но вам нужно правильно настроить элементы fieldset и имена классов, чтобы 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>

Затем в нижней части шаблона (после разметки для рендеринга формы) добавьте этот сценарий и замените цену тегами на любое имя отношения «многие ко многим» (M2M) в модели формы модели:

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

Видимо, ваше местоположение мультимедиа может отличаться, но {{STATIC_URL}} администратор / работал для меня.

...