Django - ¿Cómo guardar datos m2m a través de la señal post_save?

(Django 1.1) Tengo un modelo de proyecto que realiza un seguimiento de sus miembros utilizando un campo m2m. Se parece a esto:

class Project(models.Model):
    members = models.ManyToManyField(User)
    sales_rep = models.ForeignKey(User)
    sales_mgr = models.ForeignKey(User)
    project_mgr = models.ForeignKey(User)
    ... (more FK user fields) ...

Cuando se crea el proyecto, el seleccionadosales_rep, sales_mgr, project_mgretc.Users se agregan a los miembros para facilitar el seguimiento de los permisos del proyecto. Este enfoque ha funcionado muy bien hasta ahora.

El problema que estoy tratando ahora es cómo actualizar la membresía del proyecto cuando uno de losUser Los campos FK se actualizan a través del administrador. He intentado varias soluciones a este problema, pero el enfoque más limpio parecía serpost_save señal como la siguiente:

def update_members(instance, created, **kwargs):
    """
    Signal to update project members
    """
    if not created: #Created projects are handled differently
        instance.members.clear()

        members_list = []
        if instance.sales_rep:
            members_list.append(instance.sales_rep)
        if instance.sales_mgr:
            members_list.append(instance.sales_mgr)
        if instance.project_mgr:
            members_list.append(instance.project_mgr)

        for m in members_list:
            instance.members.add(m)
signals.post_save.connect(update_members, sender=Project)  

sin embargo, elProject todavía tiene los mismos miembros, incluso si cambio uno de los campos a través del administrador. He tenido éxito al actualizar los campos m2m de los miembros utilizando mis propias vistas en otros proyectos, pero nunca tuve que hacerlo bien con el administrador también.

¿Hay otro enfoque que debería tomar aparte de una señal post_save para actualizar la membresía? ¡Gracias de antemano por tu ayuda!

ACTUALIZAR:

Solo para aclarar, la señal post_save funciona correctamente cuando guardo mi propio formulario en la parte frontal (se eliminan los miembros antiguos y se agregan los nuevos). Sin embargo, la señal post_save NO funciona correctamente cuando guardo el proyecto a través del administrador (los miembros permanecen igual).

Creo que el diagnóstico de Peter Rowell es correcto en esta situación. Si elimino el campo "miembros" del formulario de administrador, la señal post_save funciona correctamente. Cuando se incluye el campo, guarda los miembros antiguos en función de los valores presentes en el formulario en el momento del guardado. No importa los cambios que realice en el campo m2m de miembros cuando se guarde el proyecto (ya sea una señal o un método de guardado personalizado), los miembros que estaban presentes en el formulario siempre lo sobrescribirán antes del guardado. ¡Gracias por señalar eso!

Respuestas a la pregunta(3)

Su respuesta a la pregunta