Разрешить всем активным пользователям входить на сайт администратора django - PullRequest
0 голосов
/ 09 июля 2019

Я пытаюсь разрешить всем активным пользователям входить на сайт администратора, потому что по умолчанию только сотрудники и суперпользователи могут входить на сайт администратора.

Я пытался перезаписать метод clean в моемпользовательские формы / изменить формы, но это не помогло

class User(GuardianUserMixin, AbstractUser):

    name = models.CharField(_("Name of User"), blank=True, max_length=255)

    def get_absolute_url(self):
        return reverse("users:detail", kwargs={"username": self.username})

@admin.register(User)
class UserAdmin(GuardedModelAdminMixin, auth_admin.UserAdmin):
    form = UserChangeForm
    add_form = UserCreationForm
    fieldsets = FIELDSETS
    list_display = ["username", "name", "is_active", "is_superuser", "is_staff"]
    search_fields = ["name", "username"]

class UserChangeForm(forms.UserChangeForm):
    class Meta(forms.UserChangeForm.Meta):
        model = User


class UserCreationForm(forms.UserCreationForm):

    error_message = forms.UserCreationForm.error_messages.update(
        {"duplicate_username": _("This username has already been taken.")}
    )

    class Meta(forms.UserCreationForm.Meta):
        model = User

    def clean_username(self):
        username = self.cleaned_data["username"]

        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username

        raise 
    ValidationError(self.error_messages["duplicate_username"])```

1 Ответ

1 голос
/ 09 июля 2019

Есть две вещи, которые определяют, может ли пользователь получить доступ к Django Admin:

  1. User.is_staff 1 должно быть установлено на True
  2. Пользователю потребуются соответствующие разрешения для каждой модели

Существует несколько способов установить is_staff в True для всех новых пользователей.Возможно, проще всего было бы переопределить is_staff = models.BooleanField(default=True) для вашей User модели.

Если вы не собираетесь использовать разрешения для каждой модели, вы также можете переопределить is_superuser = models.BooleanField(default=True), который предоставит пользователю все разрешения для каждогомодель.

Обратите внимание, что Django Admin в первую очередь предназначен для разработчиков и администраторов сайтов, которые знают, что они делают, а не для большинства обычных пользователей.

...