Добавление полей формы в пользовательскую модель в админ-панели django - PullRequest
0 голосов
/ 24 января 2019

Я изучаю книгу django для начинающих , тестирую код из главы 8 о пользовательской модели .Цель состоит в том, чтобы добавить поле age в модели аутентификации пользователя путем создания подкласса модели AbstractUser.

Сначала мы создаем CustomUser в models.py

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

class CustomUser(AbstractUser):
    age = models.PositiveIntegerField(null=True, blank=True)

Затемсоздание CustomUserCreationFrom и CustomUserChangeFrom в forms.py:

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

from .models import CustomUser

class CustomUserCreationFrom(UserCreationForm):
    class Meta(UserCreationForm.Meta):
        model = CustomUser
        fields = UserCreationForm.Meta.fields + ('age',)

class CustomUserChangeFrom(UserChangeForm):
    class Meta(UserChangeForm.Meta):
        model = CustomUser
        fields = UserChangeForm.Meta.fields

И, наконец, CustomUserAdmin в admin.py:

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

from .forms import CustomUserCreationFrom, CustomUserChangeFrom
from .models import CustomUser

class CustomUserAdmin(UserAdmin):
    add_form = CustomUserCreationFrom
    form = CustomUserChangeFrom
    model = CustomUser
    list_display = ['username', 'email', 'age', 'is_staff',]

admin.site.register(CustomUser, CustomUserAdmin)

И, конечно, рассказывая Джанго о нашихПользовательская модель аутентификации в settings.py:

AUTH_USER_MODEL = 'users.CustomUser'

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

enter image description here

Я что-то упустил?

1 Ответ

0 голосов
/ 20 июля 2019

Спасибо Майклу Герману за этот ответ: https://testdriven.io/blog/django-custom-user-model/

В CustomUserAdmin в admin.py вы должны объявить fieldsets:

from django.contrib import admin
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 = ('email', 'is_staff', 'is_active',)
    list_filter = ('email', 'is_staff', 'is_active',)

    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Permissions', {'fields': ('is_staff', 'is_active')}),
    )
    add_fieldsets = (
        (None, {
            'classes': ('wide',),
            'fields': ('email', 'password1', 'password2', 'is_staff', 'is_active')}
        ),
    )

    search_fields = ('email',)
    ordering = ('email',)


admin.site.register(CustomUser, CustomUserAdmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...