2011-10-15 10 views
10

Admin içinde dışında filter_horizontal kullanmak. İstediğimden çok daha fazlasını yapan this'u okudum (sadece filter_horizontal'ı istiyorum). Ben sadece filtre_horizontal uygulamak için daha basit (daha güncel) bir yol ile gelip gelmediğini kontrol etmek istedim.nedir kolay yolu ben filter_horizontal kullanmak istediğiniz bir yönetici olmayan form var Django

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) 

Sonra bizim form şu anda şuna benzer: Yani burada

kodudur. Bu this bir kopyası olabilir anlıyorum ama onun Sorunuza cevap verilmezse: Ben BTW .. bu işe yarar

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

düşündük. here ve here ödevlerini yaptım ama bunların hiçbiri işe yaramıyor.

cevap

13

bu parçacığı eski olduğunu biliyorum, ama umarım bu bilgi benim yaptığım gibi bu sayfayı stumbles başkası yardımcı olacaktır.

çok acı ve ıstırap sonra bu Django 1.4 ile çalışmak için başardı. Rh0dium gibi, tüm bu makaleleri denedim, ama çok fazla tweaks yapmak zorunda kaldım.

Sen ModelForm ile özel bir şey yapmak zorunda değilsiniz, ancak şablonda tüm bu js ve css dosyaları dahil zorunda:

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

Sonra her zamanki gibi formu işlemek, ancak css'nin çalışması için fieldet elemanlarını ve sınıf adlarını doğru olarak almanız gerekir. Örneğin: (biçimlendirme formunu işlemek için sonra)

<fieldset> 
    <div class="form-row"> 
     <form method="post" action="."> 
      {% csrf_token %} 
      {{ form.as_p }} 
     <button type="submit" value="submit">Add</button> 
    </form> 
    </div> 
</fieldset> 

Sonra şablonun ALTTA, bu komut dosyası eklemek ve birçok Birçok için (M2M) ilişkisi adı modeli formun modeline ne olursa olsun sahip pricetags yerine :

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

Anlaşılan medya konumu farklı bir şey olabilir ama {{STATIC_URL}} yönetici/benim için çalıştı.

+0

Bunu dikey yerine yatay hale getirmek için SelectFilter.init çağrısında 0 1 geçebilirsiniz. – SuperFunkyMonkey

+0

'{{STATIC_URL}}' – est

+0

yerine {% admin_media_prefix%}} kullanın. Bu yalnızca benim için çalışmıştır. ' – eosimosu

İlgili konular