Я использую AbtractUser, чтобы расширить пользовательскую модель, как описано в https://wsvincent.com/django-custom-user-model-tutorial/
И, поскольку я хочу, чтобы не имеющий персонала пользователь мог выполнять некоторые ограниченные действия администратора, я следовал https://tryolabs.com/blog/2012/06/18/django-administration-interface-for-non-staff-users/
он работает, как и ожидалось
В настоящее время мой результат опубликован на http://oi65.tinypic.com/25kuale.jpg
Как видно из рисунка, пользователь, не являющийся сотрудником, у которого есть разрешение «изменение модели пользователя», имеет «Пользователи» в разделе «Приложение Radius».меню.Мой вопрос: как добавить «MyProfile» в «верхнем меню» (то же самое место, что и «Смена пароля», которое при нажатии вызовет форму изменения пользователя (изображена справа)?
в models.py
class RadiusUser(AbstractUser) :
radius_password = models.CharField(max_length=40, verbose_name="Hotspot Password",
help_text='Password for Accessing Our Network/Hotspot',blank=True, null=True)
enable = models.BooleanField(default=False)
gb_all = models.FloatField(default=0.0)
gb_day = models.FloatField(default=0.0)
gb_night = models.FloatField(default=0.0)
expired_date = models.DateTimeField(auto_now_add=True)
is_partner = models.BooleanField(default=False)
can_add_credit = models.BooleanField(default=False)
balance = models.IntegerField(blank=False, default=0)
def __str__(self):
return self.username
в admin.py
class RadiusUserAdmin(UserAdmin):
add_form = RadiusUserCreationForm
form = RadiusUserChangeForm
model = RadiusUser
list_display = ['username']
radius_basic_fieldset = ('Radius Configs', {'classes': ('wide',),
'fields': ('radius_password','gb_all','gb_day','gb_night','balance')})
radius_permission_fieldset = ('Radius Permission', {'classes': ('wide',),
'fields': ('enable','is_partner','can_add_credit')})
def get_queryset(self, request):
print('REQUEST=', str(request))
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(pk=request.user.pk)
def get_fieldsets(self, request,obj):
print('OBJECT',obj)
if not obj:
return self.add_fieldsets
if request.user.is_superuser:
fieldsets = UserAdmin.fieldsets + (self.radius_basic_fieldset, self.radius_permission_fieldset)
else :
fieldsets = ((None,{'fields':('username','password')}),
self.radius_basic_fieldset)
print('FIELDSETS:', fieldsets)
return fieldsets
def get_readonly_fields(self, request,obj):
if request.user.is_superuser:
return (None,)
return ('username',
'enable', 'gb_all', 'gb_day', 'gb_night', 'balance')
admin.site.register(RadiusUser, RadiusUserAdmin)
nostaff_admin_site.register(RadiusUser, RadiusUserAdmin)
в forms.py
class RadiusUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = RadiusUser
fields = ('username', 'password', 'radius_password')
class RadiusUserChangeForm(UserChangeForm):
#disabled_fields=['username','enable','gb_all','gb_day','gb_night','expired_date']
class Meta:
model = RadiusUser
fields = ['username','password','radius_password','enable','gb_all','gb_day','gb_night']
def __init__(self, *args, **kwargs):
super(RadiusUserChangeForm, self).__init__(*args, **kwargs)
в project / urls.py
admin.autodiscover()
urlpatterns = [
path('', nostaff_admin_site.urls),
path('radius/', include('radius.urls')),
path('radius/', include('django.contrib.auth.urls')),
path('admin/', admin.site.urls),
]