Ich habe den Standardmanager für einige der Objekte geändert, die GenericForeignKey()
so referenzieren kann, dass diese Objekte nicht mehr in diesem Standardmanager angezeigt werden.Verwenden eines nicht standardmäßigen Managers mit GenericForeignKey()
Ich habe andere Manager, die in der Lage sein werden, diese gelöschten Objekte zu finden, aber ich sehe keine Möglichkeit, das Content-Typen-Framework über sie zu erzählen. Ist das möglich?
ich mit einigen Modellen ‚weichen Lösch‘ bin die Umsetzung, die folgenden Manager beinhalten:
from django.db import models
SDManager(models.Manager):
def get_query_set(self):
return super(SDManager, self).get_query_set().filter(is_deleted=False)
SDDeletedManager(models.Manager):
def get_query_set(self):
return super(SDDeletedManager, self).get_query_set().filter(is_deleted=True)
Dies ermöglicht es mir folgend zu tun:
SDModel(models.Model):
# ...
objects = SDManager() # Only non (soft) deleted objects
all_objects = models.Manager() # The default manager
deleted_objects = SDDeletedManager() # Only (soft) deleted objects
Wenn ein GenericForeignKey()
Feld in einem Modell Um auf ein Objekt wie SDModel
zu verweisen, verwendet es das Attribut _default_manager
, das den Manager objects
auswertet, um die Referenz zu erhalten. Dies bedeutet, dass es Referenzen verliert, wenn Objekte weich gelöscht werden.
Dies war einer der Hauptgründe, die ich GenericForeignKey()
Felder verwendet habe. Eine Lösung, die ich überfräste, implementiert eine geringere Version des Frameworks für Inhaltstypen, so dass ich meine eigene get_object()
definieren kann, die den Manager all_objects
verwendet, um auf das Referenzobjekt zuzugreifen.
Also wirklich meine Frage ist:
Ist es möglich, einen Nicht-Standard-Manager mit dem vorhandenen Inhaltstypen Rahmen zu verwenden, so dass es die weichen gelöschte Objekte findet, oder werde ich wieder umsetzen müssen alle Teile, die ich von Grund auf neu brauche?
Möglicherweise müssen Sie detailliertere Beispiele eingeben und Beispielcode veröffentlichen. – stefanw
Ich habe mehr Details hinzugefügt, um Ihnen eine klarere Vorstellung von meinem Dilemma zu geben. –
Entschuldigung, wenn ich etwas offensichtliches verpasse, aber hast du darüber nachgedacht, "Objekte" als Standard-Modelle zu behalten.Manager und Benennung des SDManagers etwas anderes? d. h. die Definitionen für Objekte und all_objects austauschen? –