Django Admin - при редактировании пользователя его пароль также необходим и обновляется - PullRequest
1 голос
/ 19 января 2020

Я использую пользовательскую модель пользователя и Django Администратор - когда я обновляю пользователя через администратора, он сбивает пароль и сохраняет его в виде обычного текста, а не в зашифрованном виде (я должен ввести пароль в форме, поле требуется).

Что мне делать, если я хочу вообще иметь возможность редактировать пользователя без пароля?

Я читаю Django admin. Отредактируйте пользователя и оставьте пароль без изменений , но я думаю, что ответ там не относится к моей ситуации - у меня нет никакого кода для администратора в представлениях.

models.py:

class User(AbstractUser):
  class Meta:
    db_table = 'app_user'

  allow_emails = models.BooleanField(default=False)
  accept_privacy_policy = models.BooleanField(default=False)
  email = models.EmailField(unique=True)

settings.py:

AUTH_USER_MODEL = "app.User"

admin.py

class UserAdmin(admin.ModelAdmin):
   list_display = ["username", "email", "allow_emails", "accept_privacy_policy", "date_joined", "is_staff", "is_superuser"]

enter image description here

Ответы [ 2 ]

1 голос
/ 19 января 2020

В вашем admin.py ваш UserAdmin должен наследоваться от from django.contrib.auth.admin import UserAdmin

from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

class UserAdmin(BaseUserAdmin):
   list_display = ["username", "email", "allow_emails", "accept_privacy_policy", "date_joined", "is_staff", "is_superuser"]

0 голосов
/ 19 января 2020

Я предлагаю вручную создать форму. Как пример:

class UpdateNameForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name')

Вы можете указать поля, которые вы будете sh изменять. Затем вы можете отобразить его в другом представлении:

@method_decorator(login_required, name='dispatch')
class ChangeNameView(generic.edit.UpdateView):
    model = models.User
    template_name = 'myaccount/change_name.html'
    form_class = forms.UpdateNameForm


    def get_object(self):
        return self.request.user

    def get_success_url(self):
        return reverse('profile', kwargs={'slug': self.object.slug})

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

...