2011-10-15 58 views
10

我有一個非管理員表單,我想在其上使用filter_horizo​​ntal。我讀過this,它比我想要的要多得多(我只想要filter_horizo​​ntal)。我想查看是否有人想出了一個更簡單(更流行)的方式來實現filter_horizo​​ntal。在Django Admin中使用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) 

那麼,我們的形式目前是這樣的。我認爲這會工作..

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/'] 

BTW:我知道這可能是this重複,但沒有回答他的問題。我已經做了很多功課herehere但這些似乎都沒有工作。

回答

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"/> 

然後渲染的形式像往常一樣,但你需要獲得適合css的fieldset元素和類名。例如:

然後在模板底部
<fieldset> 
    <div class="form-row"> 
     <form method="post" action="."> 
      {% csrf_token %} 
      {{ form.as_p }} 
     <button type="submit" value="submit">Add</button> 
    </form> 
    </div> 
</fieldset> 

(後標記來渲染表單),添加這個腳本,並替換任何pricetags您的多對多(M2M)的關係的名字在模型形式模型:

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

顯然,媒體的位置可能是不同的東西,但對我來說{{STATIC_URL}}管理員/工作。

+0

您可以將0改爲1中SelectFilter.init呼叫,使其垂直,而不是水平。 – SuperFunkyMonkey

+0

使用'{%admin_media_prefix%}',而不是'{{STATIC_URL}}' – est

+0

只有這個工作對我來說'<腳本類型= 「文/ JavaScript的」 SRC =「{%靜態 」管理/ JS/core.js「 % }「>' – eosimosu

相關問題