2014-04-09 120 views
4

我正在尋找一種基於過濾的查詢集使用filter_horizo​​ntal的方法。如何過濾Django admin中的filter_horizo​​ntal?

我試圖用一個自定義的管理者使用它:

在models.py:

class AvailEquipManager(models.Manager): 
    def get_query_set(self): 
     return super(AvailEquipManager, self).get_query_set().filter(id=3) 

class Equipment(models.Model): 
    description = models.CharField(max_length=50) 
    manufacturer = models.ForeignKey(Manufacturer) 
    [...] 
    objects = models.Manager() 
    avail = AvailEquipManager() 

    def __unicode__(self): 
     return u"%s" % (self.description) 

在admin.py:

class SystemAdmin(admin.ModelAdmin): 
    filter_horizontal = ('equipment',) # this works but obviously shows all entries 
    #filter_horizontal = ('avail',)  # this does not work 

所以問題是,如何減少filter_horizo​​ntal的左側以僅顯示特定項目?

+0

[http://stackoverflow.com/questions/39834540/django-filter-horizo​​ntal-filtering/39835254#39835254](http://stackoverflow.com/questions/39834540/django-filter-horizo​​ntal-filtering/39835254 #39835254) –

回答

15

我找到了一個解決方案通過修改回答不同的問題,我在Google Groups

它與自定義的ModelForm像這樣發現的:

創建一個新的forms.py:

from django import forms 
from models import Equipment 

class EquipmentModelForm(forms.ModelForm): 
    class Meta: 
     model = Equipment 

    def __init__(self, *args, **kwargs): 
     forms.ModelForm.__init__(self, *args, **kwargs) 
     self.fields['equipment'].queryset = Equipment.avail.all() 

然後在admin.py:

class SystemAdmin(admin.ModelAdmin): 
    form = EquipmentModelForm 
    filter_horizontal = ('equipment',) 

希望這HEL別人在某個時候出現。

+0

也許有點晚,但看看我的答案在這裏: –

相關問題