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
Post a Comment