Я разрабатывал школьное приложение, позволяющее директору и его учителям анализировать данные.Принцип должен добавить своих людей в систему.Я думаю, что использование админ-панели Django было бы действительно хорошим выбором для этого.
Здесь я являюсь суперпользователем, а руководитель - персонал (который может управлять вещами в админ-панели).
Каксуперпользователь, я вижу следующий вывод:
А вот мнение персонала:
У меня также есть две группы (одна школа, вторая школа) в системе:
Директор (штатный сотрудник) Джон Доупринадлежит к группе «Школа два», которая имеет права добавлять / изменять / удалять / просматривать пользователей.
Мой вопрос: как я могу перечислить пользователей для персонала, который может видеть только его группу людей?(нет суперпользователя и людей других групп).
Позвольте мне поделиться некоторым исходным кодом, который я реализовал для этого пользовательского представления администратора:
Файл forms.py:
class UserAdminCreationForm(forms.ModelForm):
password1 = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
class Meta:
User = get_user_model()
model = User
fields = ('email',)
def clean_password2(self):
# Check that the two password entries match
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 and password2 and password1 != password2:
raise forms.ValidationError("Passwords don't match")
return password2
def save(self, commit=True):
# Save the provided password in hashed format
user = super(UserAdminCreationForm, self).save(commit=False)
user.set_password(self.cleaned_data["password1"])
user.is_staff = True
if commit:
user.save()
return user
class UserAdminChangeForm(forms.ModelForm):
password = ReadOnlyPasswordHashField()
class Meta:
User = get_user_model()
model = User
fields = '__all__' #fields = ('email', 'password', 'is_active','is_staff', 'groups')
def __init__(self, *args, **kwargs):
super(UserAdminChangeForm, self).__init__(*args, **kwargs)
f = self.fields.get('user_permissions', None)
if f is not None:
f.queryset = f.queryset.select_related('content_type')
def clean_password(self):
return self.initial["password"]
Вот файл admin.py
from django.contrib import admin
from .models import User
from .forms import UserAdminCreationForm, UserAdminChangeForm
class MyUserAdmin(admin.ModelAdmin):
form = UserAdminChangeForm
add_form = UserAdminCreationForm
list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_active', 'is_email_verified')
list_filter = ('is_staff', 'is_active', 'groups')
readonly_fields = ('last_login', 'date_joined',)
fieldsets = (
(None, {'fields': ('email', 'password')}),
('Personal info', {'fields': ('first_name','last_name')}),
('Permissions', {'fields': ('is_active','is_staff', 'groups')}),
('Important dates', {'fields': ('last_login', 'date_joined')}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('first_name','last_name','email', 'password1', 'password2')}
),
)
search_fields = ('first_name', 'last_name', 'email',)
ordering = ('email',)
filter_horizontal = ()
admin.site.register(User, MyUserAdmin)
Я использую Django 2.1.Опять же, как я могу отобразить пользователей, которые принадлежат к определенной группе?Например, здесь, в этом случае, когда Джон Доу (сотрудники) вошел в систему как администратор, он должен видеть себя (и будущих членов группы) только потому, что он принадлежит только к «Школе второй».
Буду рад, если смогу помочь с этим.