Reputation: 501
In signals.py I am catching @receiver(m2m_changed, sender=Manager.employees.through)
.
This is getting the signal sent when a m2m relationship is created between a Manager and an Employee.
I am trying to get the Employee that this particular relationship is referencing.
I am guessing sender
is the 'through' relationship object, but really I'm not sure.
If I print(sender)
I get <class 'users.models.Manager_employees'>
.
I have tried referenced_employee = sender.employee_id
, but this gives me <django.db.models.fields.related_descriptors.ForeignKeyDeferredAttribute object at 0x03616310>
.
print(sender['employee_id'])
gives me 'ModelBase' object is not subscriptable
.
print(sender.employee_id)
gives me an error 'ModelBase' object is not subscriptable
.
I'm really just trying everything I can think of at this point.
Thank you.
Upvotes: 0
Views: 128
Reputation: 8506
Like sender
, the signal also pass other arguments.
@receiver(m2m_changed, sender=Manager.employees.through)
def my_signal_receiver(sender, **kwargs):
# kwargs is a dictionary
for key, value in kwargs.items():
print(key, value)
Take the following example:
an_employee = Employee.objects.create(name='Brenden')
my_manager.employees.add(an_employee)
You will have the following items in the dictionary:
kwargs['instance']
is the instance of the model being changed. In the example above, it will be my_manager
kwargs['model']
is the class being added. In this case Employee
and
kwargs['pk_set']
will be {an_employee.id,}
, a set of the keys being added, so you could do something like
my_employee = kwargs['model'].objects.get(id=kwargs['pk_set'][0])
Upvotes: 1