using custom user model with django-allauth gives error Cannot resolve keyword 'username' into field. Choices are: activityhistory, app, ...., -
i trying integrate django-allauth, , tried use custom user model. stated here, created model
class client(abstractbaseuser): fname = models.charfield(max_length=50) lname = models.charfield(max_length=50) email = models.emailfield(max_length=150, unique=true, db_index=true) created_at = models.datetimefield(auto_now_add=true) state_choices = ( (0, 'pending'), (1, 'active'), (2, 'deleted'), (3, 'banned'), ) state = models.smallintegerfield(choices=state_choices, default=1, editable=false) objects = clientmanager() username_field = 'email' required_fields = ['fname', 'lname'] def save(self, *args, **kwargs): ######### def get_short_name(self): return self.fname def get_full_name(self): return '%s %s' % (self.fname, self.lname) def has_perm(self, perm, obj=none): ########### def has_module_perms(self, app_label): ########### @property def is_staff(self): ###########
and manager
class clientmanager(baseusermanager): def create_user(self, fname, lname, email, created_at, state): user = self.model(fname=fname, lname=lname, email=email, created_at=created_at, state=state) return user def create_superuser(self, fname, lname, email, created_at, state): user = self.create_user(fname=fname, lname=lname, email=email, created_at=created_at, state=state) user.is_team_player = true user.save() return user
now, admin.py
did
class usercreationform(forms.modelform): #a form creating new users class meta: model = models.client fields = ('fname', 'lname', 'email') class userchangeform(forms.modelform): #a form updating users class meta: model = models.client fields = ['fname', 'lname', 'email', 'is_admin'] class clientadmin(useradmin): # forms add , change user instances form = userchangeform add_form = usercreationform list_display = ('email', 'is_admin') list_filter = ('is_admin',) fieldsets = ( (none, {'fields': ('email', )}), ('personal info', {'fields': ('fname', 'lname')}), ('permissions', {'fields': ('is_admin',)}), ) add_fieldsets = ( (none, { 'classes': ('wide',), 'fields': ('email', 'fname', 'lname')} ), ) search_fields = ('email',) ordering = ('email',) filter_horizontal = () admin.site.unregister(models.client) admin.site.register(models.client, clientadmin) admin.site.unregister(group)
in settings.py
added auth_user_model = 'app.client'
now when go /admin
gives me error
improperlyconfigured @ /admin cannot resolve keyword 'username' field. choices are: activityhistory, app, created_at, email, emailaddress, fname, id, is_active, is_admin, last_login, lname, logentry, password, socialaccount, state, testdevice
the stack trace tells me since treats email
username, , use username
, password
logging in, gives me error. can't make django ignore restriction admin only, or can change login mechanism admin use email rather username?
i trying use django-allauth
letting user sign-in through google or signup using email , password. been tough ride me till now. if has done before or knows how easily, pointing me references great.
first, add custom user model:
class client(abstractbaseuser): class meta: swappable = 'auth_user_model'
also, add settings.py file:
account_authentication_method = 'email' account_user_model_username_field = none
from docs:
(...) if custom user model not have username field (again, not mistaken e-mail address or user id), need set account_user_model_username_field none. disable username related functionality in allauth.
that worked me.
references:
[1] https://github.com/pennersr/django-allauth#custom-user-models
[2] https://code.djangoproject.com/wiki/contribauthimprovements
Comments
Post a Comment