Pass parameters from save to signal method
Use save method in adminForm or other Form as another post indicated. or use existing field, such as update_fields
def save(self, *args, **kwargs):
if self.__original_active != self.active:
update_fields = kwargs.pop('update_fields', [])
kwargs['update_fields'] = update_fields + ['active']
super(Customer, self).save(*args, **kwargs)
#####
@receiver(models.signals.post_save, sender=Mandant)
@receiver(models.signals.post_save, sender=Leads)
@receiver(models.signals.post_save, sender=Supplier)
def deactivate_person(sender, instance, *args, **kwargs):
update_fields = kwargs.pop('update_fields', [])
if update_fields and 'active' in update_fields:
if not instance.active:
for relation in ContactPersonAssociation.objects.filter(contact=instance.contact_ptr):
if relation.person:
other_relation = ContactPersonAssociation.objects.filter(person=relation.person).exclude(
contact=instance.contact_ptr)
if other_relation.count() == 0:
relation.person.active = False
relation.person.save()
else:
relation.delete()
else:
for relation in ContactPersonAssociation.objects.filter(contact=instance.contact_ptr):
if relation.person:
relation.person.active = True
relation.person.save()
else:
relation.delete()
model manager for Django Admin
Django admin use always the first model manager
# django admin use the normal objects
objects = models.Manager()
actives = ActivePersonManager()
# django admin use actives as default manager
actives = ActivePersonManager()
objects = models.Manager()