【问题标题】:Django: Unknown field(s) (avatar) specified for UserDjango:为用户指定的未知字段(头像)
【发布时间】:2020-08-02 15:23:53
【问题描述】:

所以我有这个模型

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.

【问题讨论】:

  • 头像是在 ProfileImage 模型下声明的,而不是 User
  • @Ceetified_karma,那么我该如何为用户定义头像?,你能发布答案吗?
  • @Ceetified_karma 所以我只需要创建一个类似“def user_email(self): return self.user.email”的方法,而不是返回电子邮件,而是头像?

标签: django django-models django-admin


【解决方案1】:

您应该尝试更改您的管理代码,并进行一些建模,试试这个: 模型.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)

【讨论】:

    【解决方案2】:

    您的代码应如下所示 更新 模型.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',)}),
    

    【讨论】:

    • 好的,我这样做了,但现在向我发送此错误 Unknown field(s) (user_avatar) specified for User。检查 UserAdmin 类的字段/字段集/排除属性。
    • 对不起,我忘记你使用的是 AbstractUser 让我看看你的用户模型
    • 它和我在上面的问题中使用的一样,我没有使用 abstractUser,我使用的是 get_user_model
    • 这意味着您没有将第一个代码添加到用户模型中
    • 我已经用我拥有的新用户模型编辑了我的问题,看看它
    猜你喜欢
    • 2013-06-16
    • 1970-01-01
    • 2018-02-27
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2019-09-07
    相关资源
    最近更新 更多