2013-02-04 6 views
6

Ich habe die Definition in der offiziellen Django documentation gelesen und bin immer noch verwirrt, was ein Manager tut.Was ist ein "Manager" in Django?

Die Dokumentation besagt, dass mit ihnen Datenbanktabellen/-modelle bearbeitet werden können. Aber ich verstehe das immer noch nicht.

Kann mir jemand Manager und ihre Rolle erklären? Eine Antwort mit einem Beispiel wäre vorzuziehen.

+0

'Managers' ist eine ziemlich komplexe django Klasse, wenn Sie neu in programmi ng Ich bleibe bei der [tutorial] (https://docs.djangoproject.com/en/dev/intro/tutorial01/), bis Sie mehr Vertrauen in Code haben. – danodonovan

Antwort

5

Ein Manager ist normalerweise etwas versteckt von Django-Programmierern, die Django verwendet, um zwischen model Code und dem Datenbank-Backend zu verbinden.

Wenn Sie die django ORM abfragen, tun Sie dies durch Anrufe

from my_app.models import MyModel 

mms = MyModel.objects.all() 

In diesem Fall wird die objects Teil der Funktion ist das, was von dem Manager zurückgeführt wird. Wenn Sie MyModel nur jemals blueMyModel Instanzen (die Datenbank enthält möglicherweise red Modelle auch) wollte dann könnte man einen Manager erstellen und hacken Sie Ihr Modell so

class BlueManager(models.Manager): 
    def get_query_set(self): 
     return super(BlueManager, self).get_query_set().filter(colour='Blue') 

class MyModel(models.Model): 
    colour = models.CharField(max_length=64) 
    blue_objects = BlueManager() 

und ruft

MyModel.blue_objects.all() 

würde nur Rückkehr Objekte mit colour als blue. Hinweis, dies ist eine sehr schlechte Möglichkeit, Modelle zu filtern!

Normalerweise würde man eine Manager Schnittstelle modifizieren müssen, wenn sie die QuerySet s ändern würde, die ein Manager normalerweise zurückgeben würde oder wenn Sie Abfragen auf "Tabellenebene" hinzufügen müssten (statt regulärer django "Zeilen" Ebene). Die documentation für Manager ist ziemlich vollständig und enthält mehrere Beispiele.

+0

Für zusätzliche Anerkennung, lesen Sie den Quellcode auf GitHub. https://github.com/django/django/blob/master/django/db/models/manager.py –

3

Manager ist eine Art "Tor" zwischen Anwendung und Datenbank. Eine schöne Sache ist, dass Sie Ihr eigenes Base-Queryset für das Modell definieren können. Zum Beispiel: Wenn Sie Modell ‚Buch‘ mit ‚Verfügbarkeit‘ Feld haben, können Sie eigene queryset vorbereiten, die Filter spezifischen König Verfügbarkeit Typ:

models.py:

class AvailableBookManager(models.Manager): 
    def get_query_set(self): 
     return super(AvailableBookManager, self).get_query_set().filter(availability=1) 

class Book(models.Model): 
    (...)#fields definition 

    objects = models.Manager() #default manager 
    available_objects = AvailableBookManager() #own manager 

und jetzt können Sie verwenden :

books = Book.available_objects.all() 

isntead von:

books = Book.objects.filter(available=1) 
Verwandte Themen