0

In meinem Django-Projekt, ich habe eine is_active boolean Spalte in jeder Tabelle meiner Datenbank. Jedes Mal, wenn ich oder das Framework auf die Datenbank zugreife, möchte ich nur die aktiven Datensätze anzeigen. Was ist der Standardweg, um dies zu erreichen? Sicherlich möchte ich nicht bei allen Fragen, die ich mache, nach is_active suchen.Auswahl nur aktive Datensätze django Abfrage

+0

Nutzungsmodell Manager – Thameem

Antwort

2

Der einfachste Weg, dies zu tun, ist ein benutzerdefiniertes Modell-Manager zu erstellen, wie folgt aus:

class OnlyActiveManager(models.Manager): 
    def get_queryset(self): 
     return super(OnlyActiveManager, self).get_queryset().filter(is_active=True) 

Dann fügen Sie Ihre Modelle:

class MyModel(models.Model): 
    objects = models.Manager() 
    active = OnlyActiveManager() 

Als nächstes verwenden Sie es wie folgt:

foo = MyModel.active.all() 

Sie können es auch verwenden, um die Standard-Manager zu ersetzen (so genannten objects), aber dann werden Sie benutzerdefinierte Abfragen tun müssen, um alle Datensätze zu erhalten, die in-aktiv ist.

0

Sie können es durch django Modell-Manager verwenden.

überprüfen Sie bitte django documentaion zum Detail django documentaion

0

Sie können eine Manager-Klasse für Ihr Modell, ein Beispielmodell-Manager weiter unten schreiben, für mehr Sie Django offiziellen Website verweisen

class MediaManager(models.Manager): 

    def get_queryset(self): 
     return MediaQuerySet(self.model, using=self._db) 

    def active(self): 
     return self.filter(is_active=True) 

class Media(models.Model): 
    (..model fields..) 
    objects = MediaManager() 

Die Abfrage sollte wie

sein
media = Media.objects.active() 
Verwandte Themen