Я пытаюсь выяснить, как ограничить имена групп для администратора в Django.В системе есть две группы;"Школа первая" и Школа "Две".На рисунке ниже показаны пользователи, принадлежащие только к группе «Школа два» (включая меня как Джона Доу).
Например, если я нажимаюпользователь "Джош Доу", меня направляют на эту страницу:
Мне нужно отобразить группы, к которым принадлежит только текущий аутентифицированный пользователь (Джон Доу).Таким образом, я могу назначить группу (или группы) для конкретного пользователя.Итак, здесь я хочу видеть только вариант «Школа два», так как я (Джон Доу) принадлежу только к этой группе (добавлено суперпользователем).
Как мне это сделать?
Позвольте мнеподелиться с вами моими исходными кодами: admin.py file
from django.contrib import admin
from .models import User
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from .forms import UserAdminCreationForm, UserAdminChangeForm
class MyUserAdmin(BaseUserAdmin):
form = UserAdminChangeForm
add_form = UserAdminCreationForm
list_display = ('email', 'first_name', 'last_name', 'is_staff', 'is_active', 'is_email_verified')
def get_list_filter(self, request):
if request.user.is_superuser:
return ['groups']
else:
return ['is_staff', 'is_active', 'is_email_verified']
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', 'groups')}
),
)
search_fields = ('first_name', 'last_name', 'email',)
ordering = ('email',)
filter_horizontal = ()
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
qs = qs.filter(groups__id__in=request.user.groups.all())
return qs
admin.site.register(User, MyUserAdmin)
В файле 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 = ('email', 'password', 'is_active','is_staff', 'groups')
def clean_password(self):
return self.initial["password"]
Буду рад, если кто-нибудь сможет помочь с перечислением только связанной группы(s) как указано выше.