i overriding admin model usersadmin
. have added in new attribute:gender
column in database. why doesn't work ?? how overriding admin model
class useradmin(admin.modeladmin): list_display = ('email', 'first_name', 'last_name','gender') list_filter = ('is_staff', 'is_superuser') admin.site.unregister(user) admin.site.register(user, useradmin)
i getting error message : useradmin.list_display[3], 'gender' not callable or attribute of 'useradmin' or found in model 'user'
.
edit: class useradmin comes library : django.contrib.auth.admin import useradmin , class defination
class useradmin(admin.modeladmin): add_form_template = 'admin/auth/user/add_form.html' change_user_password_template = none fieldsets = ( (none, {'fields': ('username', 'password')}), (_('personal info'), {'fields': ('first_name', 'last_name', 'email',)}), (_('permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', 'groups', 'user_permissions')}), (_('important dates'), {'fields': ('last_login', 'date_joined')}), ) add_fieldsets = ( (none, { 'classes': ('wide',), 'fields': ('username', 'password1', 'password2')} ), ) form = userchangeform add_form = usercreationform change_password_form = adminpasswordchangeform list_display = ('username', 'email', 'first_name', 'last_name', 'is_staff') list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups') search_fields = ('username', 'first_name', 'last_name', 'email') ordering = ('username',) filter_horizontal = ('groups', 'user_permissions',) def get_fieldsets(self, request, obj=none): if not obj: return self.add_fieldsets return super(useradmin, self).get_fieldsets(request, obj) def get_form(self, request, obj=none, **kwargs): """ use special form during user creation """ defaults = {} if obj none: defaults.update({ 'form': self.add_form, 'fields': admin.util.flatten_fieldsets(self.add_fieldsets), }) defaults.update(kwargs) return super(useradmin, self).get_form(request, obj, **defaults) def get_urls(self): django.conf.urls import patterns return patterns('', (r'^(\d+)/password/$', self.admin_site.admin_view(self.user_change_password)) ) + super(useradmin, self).get_urls() def lookup_allowed(self, lookup, value): # see #20078: don't want allow lookups involving passwords. if lookup.startswith('password'): return false return super(useradmin, self).lookup_allowed(lookup, value) @sensitive_post_parameters() @csrf_protect_m @transaction.commit_on_success def add_view(self, request, form_url='', extra_context=none): # it's error user have add permission not change # permission users. if allowed such users add users, # create superusers, mean have # permission change users. avoid problem entirely, # disallow users adding users if don't have change # permission. if not self.has_change_permission(request): if self.has_add_permission(request) , settings.debug: # raise http404 in debug mode user gets helpful # error message. raise http404( 'your user not have "change user" permission. in ' 'order add users, django requires user ' 'account have both "add user" , "change user" ' 'permissions set.') raise permissiondenied if extra_context none: extra_context = {} username_field = self.model._meta.get_field(self.model.username_field) defaults = { 'auto_populated_fields': (), 'username_help_text': username_field.help_text, } extra_context.update(defaults) return super(useradmin, self).add_view(request, form_url, extra_context) @sensitive_post_parameters() def user_change_password(self, request, id, form_url=''): if not self.has_change_permission(request): raise permissiondenied user = get_object_or_404(self.queryset(request), pk=id) if request.method == 'post': form = self.change_password_form(user, request.post) if form.is_valid(): form.save() msg = ugettext('password changed successfully.') messages.success(request, msg) return httpresponseredirect('..') else: form = self.change_password_form(user) fieldsets = [(none, {'fields': list(form.base_fields)})] adminform = admin.helpers.adminform(form, fieldsets, {}) context = { 'title': _('change password: %s') % escape(user.get_username()), 'adminform': adminform, 'form_url': form_url, 'form': form, 'is_popup': '_popup' in request.request, 'add': true, 'change': false, 'has_delete_permission': false, 'has_change_permission': true, 'has_absolute_url': false, 'opts': self.model._meta, 'original': user, 'save_as': false, 'show_save': true, } return templateresponse(request, self.change_user_password_template or 'admin/auth/user/change_password.html', context, current_app=self.admin_site.name) def response_add(self, request, obj, post_url_continue=none): """ determines httpresponse add_view stage. defers superclass implementation customized because user model has different workflow. """ # should allow further modification of user added i.e. # 'save' button should behave 'save , continue editing' # button except in 2 scenarios: # * user has pressed 'save , add another' button # * adding user in popup if '_addanother' not in request.post , '_popup' not in request.post: request.post['_continue'] = 1 return super(useradmin, self).response_add(request, obj, post_url_continue) admin.site.register(group, groupadmin) admin.site.register(user, useradmin) class user(abstractuser): """ users within django authentication system represented model. username, password , email required. other fields optional. """ gender = models.charfield(_('gender'),max_length=30) class meta: swappable = 'auth_user_model'
have read of "extending user model" section of customising authentication in django page. gives example of how use one-to-one relationship include additional information in custom user class, how add these new fields user page in django admin.
Comments
Post a Comment