2011-10-15 6 views
10

私はfilter_horizo​​ntalを使用したい非管理者のフォームを持っています。私は私が欲しいものよりもはるかに多くを行うthisを読んだ(私はfilter_horizo​​ntalだけが欲しい)。 filter_horizo​​ntalを実装するより単純な(より最新の)方法が出てきたかどうかを確認したいと思います。だからここDjangoの管理者の外で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/'] 

...これが働くだろうと思った:私は、これは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> 
    <div class="form-row"> 
     <form method="post" action="."> 
      {% csrf_token %} 
      {{ form.as_p }} 
     <button type="submit" value="submit">Add</button> 
    </form> 
    </div> 
</fieldset> 

次にテンプレートの下部に、このスクリプトを追加し、多くの多くの(M2M)の関係名はモデルフォームのモデルには何でもしてpricetagsを置き換えます:

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

どうやらあなたのメディアの場所は別の何かが、{{}} STATIC_URL管理/私のために働いたことがあります。

+0

SelectFilter.initコールで0を1に変更して、水平ではなく垂直にすることができます。 – SuperFunkyMonkey

+0

'{{STATIC_URL}} 'の代わりに' {%admin_media_prefix%} 'を使用してください – est

+0

これは私のためにのみ有効です' ' – eosimosu

関連する問題