La funzione ForeignRelatedObjectsDescriptor.create_manager(...)
di Django crea dinamicamente le classi RelatedManager
e successivamente inizializza un'istanza della classe creata dinamicamente.Sovrascrittura dei metodi RelatedManager di Django
Se volevo ignorare il metodo RelatedManager.add(...)
, come dovrei farlo?
Le classi RelatedManager
vengono create nel file: django/db/models/fields/related.py
.
Un esempio di come mi piacerebbe utilizzare un costume RelatedManager
è ...
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()?
Tutti i suggerimenti sarebbero apprezzati.
uomo, tu sei il mio django guru intorno a queste parti, sai tutto –
Questo non funziona. Creazione di un gestore personalizzato che imposta use_for_related_fields = True garantisce che la superclasse di RelatedManager sia il gestore personalizzato. Tuttavia, la classe RelatedManager è definita dinamicamente nel file specificato nella mia domanda e qualsiasi add() nel gestore personalizzato è sovrascritta dalla definizione dinamica di RelatedManager. Potrei modificare l'add() di RelatedManager e aggiungere i ganci self.pre_save() e self.post_save() da implementare all'interno di Managers personalizzati e quindi inviare una patch a Django, ma mi chiedo se c'è un modo migliore in cui non sono consapevole di – brildum
-1 poiché non funziona, il "_related_" in quella variabile è solo un pezzo di cronologia e non ha nulla a che fare con i gestori dei campi correlati. – Evgeny