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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
queryset
ist eine Methode, die aufModelAdmin
gibt ein queryset. Sie müssen, um es zu überschreiben, die auf IhremEntryAdmin
Klasse.Änderung der queryset wird die Begrenzung der angezeigten Einträge in der Liste anzuzeigen. Sie müssen auch überschreiben
has_change_permission
um sicherzustellen, dass der Benutzer über die Berechtigung zum Bearbeiten des Objekts, auf das einzelne Objekt Bearbeiten-Seite. Finden Sie unter den folgenden blog-Beitrag von James Bennett für weitere details:http://www.b-list.org/weblog/2008/dec/24/admin/