Django - Como salvar dados m2m via sinal post_save?

(Django 1.1) Eu tenho um modelo de projeto que monitora seus membros usando um campo m2m. Se parece com isso:

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) ...

Quando o projeto é criado, o selecionadosales_rep, sales_mgr, project_mgretcUsers são adicionados aos membros para facilitar o controle das permissões do projeto. Essa abordagem funcionou muito bem até agora.

O problema com o qual estou lidando agora é como atualizar a associação do projeto quando um dosUser Os campos FK são atualizados através do administrador. Tentei várias soluções para esse problema, mas a abordagem mais limpa parecia ser umapost_save sinal como o seguinte:

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)  

No entanto, oProject ainda tem os mesmos membros, mesmo que eu mude um dos campos pelo administrador! Consegui atualizar os campos m2m dos membros usando minhas próprias visualizações em outros projetos, mas nunca tive que fazê-lo funcionar bem com o administrador também.

Existe outra abordagem que eu deveria adotar além de um sinal post_save para atualizar a associação? Agradeço antecipadamente por sua ajuda!

ATUALIZAR:

Apenas para esclarecer, o sinal post_save funciona corretamente quando eu salvo meu próprio formulário no front end (membros antigos são removidos e novos são adicionados). No entanto, o sinal post_save NÃO funciona corretamente quando eu salvo o projeto pelo administrador (os membros permanecem os mesmos).

Eu acho que o diagnóstico de Peter Rowell está correto nessa situação. Se eu remover o campo "members" do formulário de administração, o sinal post_save funcionará corretamente. Quando o campo é incluído, ele salva os membros antigos com base nos valores presentes no formulário no momento do salvamento. Independentemente das alterações que eu fizer no campo m2m dos membros quando o projeto for salvo (seja um método de salvamento de sinal ou personalizado), ele sempre será substituído pelos membros que estavam presentes no formulário antes do salvamento. Obrigado por apontar isso!

questionAnswers(3)

yourAnswerToTheQuestion