I think i tried a postsave signal a while back without luck, but I'll give it another shot. In order to know which users to add to or remove from the members field I have to process the data in the save method itself. Can you show me how I could pass a list of users to remove and add to the postsave signal? Any more specifics you can give would be appreciated. Thanks!
On Sep 23, 7:00 pm, Brian McKeever <kee...@gmail.com> wrote: > Try using a postsave signal. It'll automatically trigger your method > upon saving a Project. > > http://docs.djangoproject.com/en/dev/topics/signals/#receiver-functions > > Basically, all you'd need is: > from django.db.models.signals import post_save > > def member_check(sender, **kwargs): > #your code > > post_save.connect(member_check, sender = Project) > > But you should know that on some systems (like mine), it sends the > signal twice per save. > > On Sep 23, 4:46 pm, M Godshall <michaelgodsh...@gmail.com> wrote: > > > > > I have a Project model with a ManyToManyField called "members" to keep > > track of members of a project. Whenever the model is updated, I need > > to check if certain members need to be removed from or added to the > > m2m field. The most logical place to do this is in the model's custom > > save method, but when I try to save the model in the admin the members > > field reverts to its previous state even after running > > self.members.remove(user1) and self.members.add(user2). From what I > > have researched and tested so far, if you save a project from a front- > > end view, the m2m field updates without reverting to its previous > > state, but I really need this functionality when a model is saved in > > the admin as well. Any insight into how to make this work would be > > appreciated. Here's what I'm working with right now: > > > class Project(models.Model): > > .... > > assigned_to = models.ForeignKey(User, > > related_name="projects_assigned_to") > > sales_rep = models.ForeignKey(User, > > related_name="sales_rep_projects") > > sales_mgr = models.ForeignKey(User, > > related_name="sales_mgr_projects") > > .... > > > def save(self, force_insert=False, force_update=False): > > if Project.objects.filter(id__exact=self.id).count(): > > project = Project.objects.get(id=self.id) > > old_sales_rep = project.sales_rep > > old_sales_mgr = project.sales_mgr > > super(Project, self).save() > > if old_sales_rep != self.sales_rep: > > if old_sales_rep in self.members.all(): > > self.members.remove(old_sales_rep) > > if self.sales_rep: > > self.members.add(self.sales_rep) > > if old_sales_rep == self.assigned_to: > > new_assigned = self.sales_rep > > if old_sales_mgr != self.sales_mgr: > > if old_sales_mgr in self.members.all(): > > self.members.remove(old_sales_mgr) > > if self.sales_mgr: > > self.members.add(self.sales_mgr) > > if old_sales_mgr == self.assigned_to: > > new_assigned = self.sales_mgr > > if new_assigned: > > self.assigned_to = new_assigned > > super(Project, self).save() --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---