Die Funktion ForeignRelatedObjectsDescriptor.create_manager(...)
von Django erstellt dynamisch die Klassen RelatedManager
und initialisiert anschließend eine Instanz der dynamisch erstellten Klasse.Überschreiben von Djangos Methoden des zugehörigen Managers
Wenn ich die RelatedManager.add(...)
Methode überschreiben wollte, wie würde ich es tun?
Die Klassen RelatedManager
werden in der Datei django/db/models/fields/related.py
erstellt.
Ein Beispiel, wie ich RelatedManager
eine benutzerdefinierte verwenden möchten ist ...
class Record(Model):
string = CharField()
class Managed(Model):
record = ForeignKey('Record')
boolean = BooleanField()
def view_function(...):
record = Record(string='Example')
record.save()
record.managed_set.add(Managed(boolean=True)) # How to override add()?
würde geschätzt Irgendwelche Vorschläge.
Mann, du bist mein Django Guru um diese Teile herum, du weißt alles –
Das funktioniert nicht. Durch Erstellen eines benutzerdefinierten Managers, der use_for_related_fields = True festlegt, wird sichergestellt, dass die Oberklasse des RelatedManager der benutzerdefinierte Manager ist. Die RelatedManager-Klasse wird jedoch dynamisch in der Datei definiert, die in meiner Frage angegeben ist, und jedes add() im benutzerdefinierten Manager wird von der dynamischen Definition von RelatedManager überschrieben. Ich kann die add() - Funktion von RelatedManager ändern und die Self-Prefixes() und Self.post_save() hinzufügen, um sie in benutzerdefinierten Managern zu implementieren und dann einen Patch an Django zu senden, aber ich frage mich, ob es einen besseren Weg gibt bewusst. – brildum
-1 Da es nicht funktioniert, ist das "_related_" in dieser Variable nur ein Stück Geschichte und hat nichts mit Managern verwandter Felder zu tun. – Evgeny