2009-07-27 8 views
1

Diese Frage ist über das letzte Beispiel auf Custom managers and model inheritance.Django: Einfach hinzufügen zusätzlichen Manager für Kind-Klasse, immer noch Standard-Manager von AbstractBase

Ich möchte in der Lage sein, etwas Ähnliches wie die folgenden Funktionen ausführen:

class ExtraManagerModel(models.Model): 
# OtherManager class supplied by argument shall be set as manager here 

    class Meta: 
     abstract = True 

class ChildC(AbstractBase, ExtraManagerModel(OtherManager)): # That doesn't work, something like that 
    ... 
    # Default manager is CustomManager, but OtherManager is 
    # also available via the "extra_manager" attribute. 

Der ganze Zweck davon ist, dass ich möchte nicht eine ExtraManagerModel Klasse für jeden überschrieben Manager schreiben, um die zu halten Standardmanager der Elternklasse (AbstractBase).

Irgendwelche Ideen, wie dies erreicht werden kann?

+0

Es ist mir nicht klar, was Sie tun möchten. ChildC im Beispiel von der Django-Website scheint zu tun, was Sie wollen. Beide Manager stehen der Klasse zur Verfügung, was ist der "Parameter" für ExtraManagerModel in der Vererbung? – txwikinger

+0

Es wäre nicht sehr DRY, eine neue Model-Klasse für jeden zusätzlichen Manager zu schreiben, den Sie einem Modell hinzufügen möchten. Ich hätte gern eine Art ExtraManagerModel Template-Klasse für verschiedene Extra-Manager-Klassen. – stefanw

Antwort

0

Ich bin mir absolut nicht sicher, ob ich Ihre Frage verstehe. Ihr Code-Snippet scheint dem Kommentar darunter zu widersprechen.

Ihr Code-Snippet sieht so aus, als ob Sie verschiedene ExtraManagerModel-Klassen haben möchten. Wenn dies der Fall ist, können Sie eine abstrakte Klasse verwenden, die von diesen ExtraManagerModels implementiert wird, und Sie übernehmen das abstrakte Elternelement dieser Klassen für die Klasse childC.

Hoffe, das hilft.

+0

Ich sehe jetzt, es ist eine komische Frage, weil es am Ende sowieso nicht das tut, was es wollte. Ich bin besser dran, den vermeintlichen Standardmanager im Modell vor anderen Managern neu zu deklarieren. – stefanw

+0

Für alle, die mein Problem verstanden haben und nach einer Lösung suchen: Am Ende habe ich Klassenfabriken benutzt: Funktionen, die benutzerdefinierte Klassen deklarieren und zurückgeben. – stefanw

Verwandte Themen