Django-beheerder, lijstfilter op basis van Booleaanse opvraagbaar

Op een modelbeheerderobject heb ik een opvraagbare functie, die ofwel Waar of Onwaar retourneert. Ik wil deze callable kunnen gebruiken om te filteren wat wordt weergegeven in de lijst (d.w.z. list_filter). De onderstaande code zou echter niet werken, omdat u alleen list_filter op velden kunt gebruiken:

...

class FooAdmin(admin.ModelAdmin):
    ...
    list_filter['bar']
    def bar(self, obj):
        x = ... #something boolean
        return x
...


Is there any way to use a True/False callable to filter a list in admin? Or do you have to denormalize your data if you want this functionality?

I notice that in the development docs, this is now possible: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

In de 1.3 docs (de Django-versie die ik gebruik) wordt hier echter niet over gesproken: https://docs.djangoproject.com/en/1.3/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter So I ' m ervan uitgaande dat ik de nieuwe functionaliteit niet kan gebruiken met mijn project :-(

4
Het wordt vrijgegeven wanneer het wordt uitgebracht. Helaas heeft Django geen vast schema voor de release. Echter, van wat ik heb gezien, lijkt het erop dat het dichtbij is.
toegevoegd de auteur Chris Pratt, de bron
Ik denk dat een vervolgvraag hiernaar is wanneer Django 1.4 wordt vrijgegeven? Als het relatief snel is (dat wil zeggen minder dan 6 weken), dan kan ik de nieuwe list_filter API gebruiken :)
toegevoegd de auteur Jon Cox, de bron
@TillBackhaus ah ja, technisch gezien is het anders dan wat ik heb gespecificeerd, maar dichtbij genoeg voor mijn doeleinden.
toegevoegd de auteur Jon Cox, de bron
Hoewel het lijkt dat het tenminste maart is voordat 1.4 wordt vrijgegeven (bron: groups.google.com/group/django-developers/browse_thread/thre‌ ad/& hellip; ), dus ik ben beter op zoek naar een manier om dit in 1.3 te doen.
toegevoegd de auteur Jon Cox, de bron
@TillBackhaus in de dev-versie kun je een klasse maken die wordt gebruikt in het filter en dit toewijzen aan je model in ModelAdmin - "een klasse die overerft van django.contrib.admin.SimpleListFilter, die je nodig hebt om de titel en parameternaam op te geven schrijft toe aan en overschrijft de lookups en queryset-methoden "
toegevoegd de auteur Burhan Khalid, de bron
De documentatie van de dev geeft niet dat je een opvraagbare kan gebruiken als een list_filter.
toegevoegd de auteur tback, de bron
@burhan ja, dat maakt vrij complexe filters mogelijk. Het staat echter niet toe om een ​​callable te gebruiken als criteria zoals Jonathan in de vraag heeft beschreven.
toegevoegd de auteur tback, de bron

1 antwoord

Als je op de een of andere manier de werking van je bar -functie kunt uitdrukken in termen van ORM double-underscore opzoekpaden, dan kun je mogelijk een FilterSpec maken in Django 1.3

See django.contrib.admin.filterspecs

Deze klassen behandelen het genereren van een lijst met filterkeuzes en het voorbereiden van de querystring-waarde voor de URL enz. Voor zover ik weet, werken ze door een kenmerk field_path te leveren dat door andere delen van de beheerderscode wordt gebruikt om de changelist queryset.

For an example of a custom FilterSpec see:
http://djangosnippets.org/snippets/2644/

2
toegevoegd