Пользователь Django Custom --- Редактировать новые поля CustomUser в admin - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь расширить учебник Уильяма Винсента, размещенный ниже:

https://wsvincent.com/django-custom-user-model-tutorial/

Я пытаюсь добавить новые поля в модель CustomerUser, которую я расширил с помощью импорта AbstractUser из django.contrib.auth.models:

Пользователи / models.py:

from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager

class CustomUserManager(UserManager):
    pass

class CustomUser(AbstractUser):
    bio         = models.TextField(max_length=500, blank=True)

    objects = CustomUserManager()

    def __str__(self):
        return self.username

Я добавил поле 'bio' в модель выше, но когда я получаю доступ к пользователю через административный портал django, я не вижу там нового поля 'bio' с полями администратора по умолчанию, упакованными с django: т.е. : Личная информация: имя, фамилия, адрес электронной почты и т. Д.

Мое приложение CustomUser регистрируется на портале администратора следующим образом (в соответствии с указанным выше руководством):

В качестве теста для себя я смог успешно отобразить био-поле (показав пустое место, как и ожидалось) в моем list_display. Повторюсь, моя проблема в том, что у меня нет возможности обновить это поле, когда я нажимаю, чтобы отредактировать пользователя. Хорошей новостью является то, что django подхватил миграцию моего нового «био» поля.

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin

from .forms import CustomUserCreationForm, CustomUserChangeForm
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationForm
    form = CustomUserChangeForm
    model = CustomUser
    list_display = ['username', 'email','is_staff', 'bio']

admin.site.register(CustomUser, CustomUserAdmin)

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

Пользователи / forms.py:

from django import forms
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
from .models import CustomUser

class CustomUserCreationForm(UserCreationForm):

    class Meta(UserCreationForm):
        model = CustomUser
        fields = ('username', 'email')

class CustomUserChangeForm(UserChangeForm):

    class Meta:
        model = CustomUser
        fields = ('username', 'email')

Правда, я не очень хорошо понимаю, что происходит в файле form.py чуть выше. Я подозреваю, что это может не иметь ничего общего с формой редактирования пользователя, к которой я обращаюсь через административный портал, поэтому мне может понадобиться выяснить, как внести изменения в стандартное приложение администратора django.

Как всегда, ваша помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 18 ноября 2018

Энди, попробуйте добавить это в свой класс администратора:

fieldsets = (
        (('User'), {'fields': ('username', 'email','is_staff', 'bio')}),
    )

Вы также можете добавить другие наборы, например, другой раздел, который посвящен разрешениям, и может отображать информацию об is_active или группах.Вы можете сделать это:

fieldsets = (
        (('User'), {'fields': ('username', 'email','is_staff', 'bio')}),
        (('Permissions'), {'fields': ('is_active','is_staff')}),
    )

Вы можете просто вставить наборы полей под list_display.Также есть поля readonly_fields для полей, которые вы не хотите редактировать в админке.

...