Lassen Sie sich Benutzerobjekt hat einen Fremdschlüssel namens Einheit auf das Niveau, das sie repräsentieren (B1 Ihre Manager übernehmen , C3, ...)
Zuerst benötigen Sie einen Weg, um alle Mitarbeiter, die Nachkommen sind. Wie schon erwähnt, wird Django-Mptt dein Leben viel einfacher machen. Einfach user.unit.get_leafnodes()
mit mptt korrekt einrichten und du hast alle deine verwalteten Mitarbeiter.
Siehe MPTTModel.get_leaf_nodes.
Dann müssen Sie diese Informationen verwenden.
Wenn Sie den django admin verwenden, können Sie diesen in ModelAdmin.get_queryset verwenden. get_queryset nimmt die Anfrage als Argument. Einfach auf request.user
zugreifen und Sie sind wieder auf den Beinen. Sie können dann die Dinge ein wenig mehr mit ModelAdmin.has_change_permission und der Familie abschließen.
Wenn Sie mehr Kontrolle möchten, werfen Sie einen Blick auf die generischen klassenbasierten Ansichten. Ihre views.py
kann so einfach sein:
from django.views import generic
from .models import Employee
class EmployeeList(generic.ListView):
def get_queryset(self):
return self.request.user.unit.get_leafnodes()
class EmployeeCreate(generic.edit.CreateView):
fields = ["name"]
def get_queryset(self):
return self.request.user.unit.get_leafnodes()
class EmployeeUpdate(generic.edit.UpdateView):
fields = ["name"]
def get_queryset(self):
return self.request.user.unit.get_leafnodes()
Die Bearbeitungsansichten, die ein ModelForm basierend auf dem Objekt durch die queryset zurück schaffen. Das Attribut fields ist erforderlich. Siehe das Dokument unter generic views und those based on models forms.
Dies ist keine besonders gute Frage, da es hier keine MVCE gibt, und Sie stellen wirklich eine Reihe von Fragen - Datenbankdesign und Benutzerberechtigungen zumindest - ich würde mir http: // ansehen stackoverflow.com/help/how-to-ask und sehen Sie, ob Sie dies entsprechend bearbeiten können. – Withnail