Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>What I do is to set some '_attrs' to the instance and then use them in the signal handler.</p> <p>I imagine your case could be:</p> <pre><code># Function to Create user Account/Profile def create_user_account(sender, instance, created, **kwargs): if created: attrs_needed = ['_language', '_field', '_otherfield'] if all(hasattr(instance, attr) for attr in attr_needed): models.Account.objects.create( user=instance, language=instance._language, field=instance._field, otherfield=instance._otherfield) # Create User / User Registration def UserRegistration(request): if request.method == 'POST': username = request.POST['fn'].capitalize() + ' ' + request.POST['ln'].capitalize() # CREATE USER newuser = User.objects.create_user( username=username, email=request.POST['email'], password=request.POST['pw']) newuser.first_name = request.POST['fn'].capitalize() newuser.last_name = request.POST['ln'].capitalize() # Set some extra attrs to the instance to be used in the handler. newuser._language = request.POST['language'] newuser._field = request.POST['field'] newuser._otherfield = request.POST['otherfield'] newuser.save() return HttpResponse(username) #Post Save handler to create user Account/Profile post_save.connect(create_user_account, sender=User) </code></pre> <p>I hate to do this, and I imagine it can breaks in horrible ways, and is hard to debug sometimes, also there is no a strict way to force the data needed for the handler, one could define a <code>signal_data(data, signal, instance)</code> to define the data needed for the signal handler for a particular instance.</p> <p>A nice option that I haven't tried is to use methods of the instance as signal's handlers and maybe we can use a more structured way to pass the data.</p> <p>Bye.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload