python - Pass additional data while registering user using Djoser and Django Rest Framework -


i'm using djoser(https://github.com/sunscrapers/djoser) along django rest framework. i'm using default /register/ endpoint provided djoser. now, want pass additional information @ time of registering user. example referral code (to see user came from). think need implement logic in create_user method of usermanager class.

here myusermanager:

class myusermanager(baseusermanager):     def create_user(self, name, email, referrer_code="", password=none):         """         creates , saves user given email, date of         birth , password.         """         if not email:             raise valueerror('users must have email address')         print "referrercode" + referrer_code         referrer = 0         if (referrer_code != ""):             try:                 referrer = myuser.objects.filter(referral_code=referrer_code).first().id             except:                 referrer = 0         user = self.model(             name=name,             email=self.normalize_email(email),             referrer=referrer,         )          user.set_password(password)         user.save(using=self._db)         return user 

here, referrer_code want pass part of post request.

here myuser model:

class myuser(abstractbaseuser):     email = models.emailfield(         verbose_name='email address',         max_length=255,         unique=true,     )     is_active = models.booleanfield(default=true)     is_admin = models.booleanfield(default=false)     name = models.charfield(max_length=255, blank=true)     referrer = models.integerfield(default=0)     referral_code = models.charfield(max_length=10, blank=true)      objects = myusermanager()      username_field = 'email'     required_fields = ['name', ] 

this says on djoser documentation page:

use endpoint register new user. user model manager should implement create_user method , have username_field , required_fields fields.

however, in case, referrer_code not field of user being registered, field of user referred new one. don't think including referral_code required field help.

may or may not helpful , old, it's still unanswered here goes.

came across similar issue using custom user model (extending abstractbaseuser), , despite did on serializer, drf show default fields - think name, email, , password.

i'd gone through docs , done specified, including specifying serializer in settings.py in example in docs: 'user': 'myapp.serializers.specialuserserializer', still no dice.

turns out need serializer each endpoint. i'd expected you'd define user serializer, , registration endpoint grab that. instead, need user_registration endpoint defines stuff necessary registration. these defaults, each of you'd have override applicable:

{     'activation': 'djoser.serializers.activationserializer',     'login': 'djoser.serializers.loginserializer',     'password_reset': 'djoser.serializers.passwordresetserializer',     'password_reset_confirm':     'djoser.serializers.passwordresetconfirmserializer',     'password_reset_confirm_retype': 'djoser.serializers.passwordresetconfirmretypeserializer',     'set_password': 'djoser.serializers.setpasswordserializer',     'set_password_retype': 'djoser.serializers.setpasswordretypeserializer',     'set_username': 'djoser.serializers.setusernameserializer',     'set_username_retype': 'djoser.serializers.setusernameretypeserializer',     'user_registration': 'djoser.serializers.userregistrationserializer',     'user': 'djoser.serializers.userserializer',     'token': 'djoser.serializers.tokenserializer', } 

so in case, put in settings.py:

djoser = {     'serializers': {         'user_registration': 'account.serializers.userserializer',     }, } 

and endpoing http://127.0.0.1:8000/auth/register/ showing fields wanted to. hope helps else!


Comments