Gewusst wie: filtern von queryset in changelist_view im django admin?

Sagen wir mal ich habe eine Website, wo Benutzer können Einträge durch den admin-panel. Jeder Benutzer hat seine eigene Kategorie ist er verantwortlich für (jede Kategorie hat ein Redakteur zugewiesen durch ForeingKey/ManyToManyField).

Wenn der Benutzer fügt den Eintrag, dass ich die Grenze der Möglichkeiten durch die Verwendung EntryAdmin wie diese:

class EntryAdmin(admin.ModelAdmin):
    (...)

    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'category':
            if request.user.is_superuser:
                kwargs['queryset'] = Category.objects.all()
            else:
                kwargs['queryset'] = Category.objects.filter(editors=request.user)
            return db_field.formfield(**kwargs)
        return super(EntryAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

Diese Weise kann ich begrenzen Sie die Kategorien aus, zu denen ein Benutzer kann den Eintrag hinzufügen, und es funktioniert perfekt.

Nun der schwierige Teil: den Eintrag änderungsliste/Aktion Seite möchte ich zeigen nur die Einträge, die gehören zum aktuellen Benutzer-Kategorie. Ich habe versucht, dies zu tun mit dieser Methode:

    def changelist_view(self, request, extra_context=None):
        if not request.user.is_superuser:
            self.queryset = self.queryset.filter(editors=request.user)

Aber ich bekomme diese Fehlermeldung:

AttributeError: 'function' - Objekt hat kein Attribut 'filter'

Dies ist merkwürdig, weil ich dachte, es sollte ein typisches QuerySet. Grundsätzlich sind solche Methoden nicht gut dokumentiert und Graben durch Tonnen von Django-code ist nicht mein Lieblingssport.

Irgendwelche Ideen, wie kann ich mein Ziel erreichen?

InformationsquelleAutor minder | 2010-04-11
Schreibe einen Kommentar