Django: Неизвестные поля (аватар), указанные для пользователя - PullRequest
0 голосов
/ 02 августа 2020

Итак, у меня есть эти модели

from django.db import models
from django.conf import settings

# Create your models here.

class ProfileImage(models.Model):
    user = models.OneToOneField(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        editable=False
    )
    avatar = models.ImageField()
    
    def user_avatar(self):
       return self.profileimage.avatar

И мой admin.py

from django.contrib import admin

# Register your models here.
from django.contrib.auth.admin import UserAdmin

UserAdmin.fieldsets += ('Custom fields set', {'fields': ('avatar',)}),

Я использую модель User и добавляю к ней поле изображения, но я хочу см. поле изображения на странице администратора, так что это было сделано в admin.py, но когда я вхожу в администратор пользователей, появляется эта ошибка:

Unknown field(s) (avatar) specified for User. Check fields/fieldsets/exclude attributes of class UserAdmin.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Что ж, вам следует попробовать изменить код администратора, и вы немного моделируете, попробуйте это: models.py

class Profile(models.Model):
    user = models.OneToOneField(
        verbose_name=_('User'),
        to=settings.AUTH_USER_MODEL,
        related_name='profile',
        on_delete=models.CASCADE
    )
    avatar = models.ImageField()

и admin.py

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

from accounts.models import ProfileImage

User = get_user_model()


class ProfileInline(admin.StackedInline):
    model = ProfileImage
    max_num = 1
    can_delete = False

class MyUserAdmin(UserAdmin):
    inlines = [ProfileInline]

# unregister old user admin
admin.site.unregister(User)
admin.site.unregister(Group)

# register new user admin that includes a UserProfile
admin.site.register(User, MyUserAdmin)
0 голосов
/ 02 августа 2020

Ваш код должен выглядеть так: обновлено Models.py

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

class ProfileImage(models.Model):
      user = models.OneToOneField(User,
      on_delete=models.CASCADE,
      editable=False)
      avatar = models.ImageField()

     def user_avatar(self):
            return self.profileimage.avatar

User.add_to_class('user_avatar', user_avatar)

admin.py

UserAdmin.fieldsets += ('Custom fields set', {'fields': ('user_avatar',)}),
...