Я занимался серфингом в Интернете, пытаясь найти что-то подобное, но я нахожу только внешние решения или устаревшие руководства.Я хочу позволить штатным пользователям редактировать некоторую информацию по умолчанию, такую как имя, фамилия, электронная почта, а также другую дополнительную информацию, такую как биография, телефон и т. Д. Я создал класс Профиль с отношением OneToOneField к Пользователь как предложено здесь но таким образом только суперпользователь может редактировать эту информацию.Если я даю разрешение can_change_user на группу персонала, то каждый пользователь "staff" может редактировать любой профиль.
edit это файлы моего приложения с именем users
# admin.py - пользователи
class ProfileInline(admin.StackedInline):
model = Profile
can_delete = False
verbose_name_plural = 'Profile'
fk_name = 'user'
class CustomUserAdmin(UserAdmin):
inlines = (ProfileInline, )
def get_inline_instances(self, request, obj=None):
if not obj:
return list()
return super(CustomUserAdmin, self).get_inline_instances(request, obj)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
# models.py - пользователи
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
extra_info = models.CharField(max_length=30, blank=True)
@receiver(post_save, sender=User)
def create_or_update_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
instance.profile.save()
РЕДАКТИРОВАТЬ 1: Я отредактировал два класса таким образом
class ProfileInline(admin.StackedInline):
model = Profile
can_delete = False
verbose_name_plural = 'Profilo'
fk_name = 'user'
def has_change_permission(self, request, obj=None):
print("utente:")
print(request.user)
if obj == request.user:
return True
else:
return False
class CustomUserAdmin(UserAdmin):
inlines = (ProfileInline, )
# this function prints error *"get_queryset() missing 1 required positional argument: 'request'"*
'''
def get_queryset(self, request):
queryset = super(CustomUserAdmin, self).get_queryset()
queryset = queryset.filter(user=self.request.user)
return queryset
'''
def get_fieldsets(self, request, obj=None):
if not request.user.is_superuser:
if obj == request.user:
fieldsets = (
(('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
)
else:
fieldsets = ()
else:
fieldsets = self.fieldsets
return fieldsets
def get_inline_instances(self, request, obj=None):
if not obj:
return list()
return super(CustomUserAdmin, self).get_inline_instances(request, obj)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
, почему появляется "# 1", пока пользователь не заполнит поле?