Django - Пользовательская модель не может отображаться на модели User

Я создал модель в Django v4, и хочу показать информацию внутри представления User admin. После миграции новая таблица была успешно создана и данные сохраняются. Вот код:

models.py

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

class Profile(models.Model):
    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE
    )

    address = models.CharField(
        max_length=20,
        blank=True,
        null=True
    )

    def __str__(self):
        return self.user.username

admin.py

from django.contrib import admin
from django.contrib.auth.models import User
from .models import Profile

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'Extra Information'

@admin.register(ProfileInline)
class UserAdmin(admin.ModelAdmin):
    inlines = [
        ProfileInline,
    ]

В созданной таблице хранятся следующие данные:

id address user_id
3 Test 2

Где столбец user_id является внешним ключом из таблицы auth_user, которая создается автоматически (я полагаю?).

Теперь, когда я пытаюсь запустить, makemigrations и т.д., он показывает мне следующее:

AttributeError: type object 'ProfileInline' has no attribute '_meta'

Каким образом можно добавить информацию к пользователю, как это делают разделы по умолчанию?

Я нашел решение. admin.py должен выглядеть следующим образом:

from django.contrib import admin
from django.contrib.auth.models import User
from .models import Profile

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'Extra Information'

class UserAdmin(admin.ModelAdmin):
    inlines = [
        ProfileInline,
    ]

admin.site.unregister(User)
admin.site.register(User, UserAdmin)

В этом случае лучшим подходом будет наследование класса Django AbstractUser, добавление своих дополнительных полей, а затем установка AUTH_USER_MODEL в настройках Django, чтобы django использовал вашу модель для аутентификации. https://docs.djangoproject.com/en/4.0/ref/settings/#std-setting-AUTH_USER_MODEL

models.py

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

class Profile(AbstractUser):
    address = models.CharField(
        max_length=20,
        blank=True,
        null=True
    )

    def __str__(self):
        return self.username

settings.py

AUTH_USER_MODEL = "<your_app_name>.Profile"
Вернуться на верх