Vedi http://gterzian.github.io/Django-Cookbook/signals/2013/09/07/manipulating-m2m-with-signals.html
problema: Quando si manipolano l'M2M di un modello all'interno di un post o ricevitore di segnale pre_save, le modifiche vengono spazzati via nella successiva compensazione' 'del m2m di Django.
soluzione: In te posta o gestore di segnale pre_save, registrare un altro gestore per il segnale m2m_changed sul modello intermediario m2m del modello di cui si desidera aggiornare m2m.
Si noti che questo secondo gestore riceverà diversi segnali m2m_changed ed è fondamentale per verificare il valore degli argomenti di "azione" passati insieme a essi.
All'interno di questo secondo gestore, verificare l'azione "post_clear". Quando ricevi un segnale con l'azione post_clear, il m2m è stato cancellato da Django e hai la possibilità di manipolarlo con successo.
un esempio:
def save_handler(sender, instance, *args, **kwargs):
m2m_changed.connect(m2m_handler, sender=sender.m2mfield.through, weak=False)
def m2m_handler(sender, instance, action, *args, **kwargs):
if action =='post_clear':
succesfully_manipulate_m2m(instance)
pre_save.connect(save_handler, sender=YouModel, weak=False)
vedere https://docs.djangoproject.com/en/1.5/ref/signals/#m2m-changed
Quindi, stai cambiando il pk degli oggetti? –
Ho un oggetto, e c'è una relazione molti con altri, ma posso ottenere una relazione aggiornata – diegueus9