Python Django用户配置文件中的自定义列

Python Django用户配置文件中的自定义列,python,django,Python,Django,我想在Django admin的用户(/auth/user/)部分添加自定义列 型号.py from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver class Profile(models.Model): user = models

我想在Django admin的用户(
/auth/user/
)部分添加自定义列

型号.py

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

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

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

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)

@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
    instance.profile.save()
admin.py中,我有以下代码:

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

class ProfileInline(admin.StackedInline):
    model = Profile
    can_delete = False
    verbose_name_plural = 'Custom fields'

class CustomUser(UserAdmin):
    inlines = (ProfileInline, )
    list_diplsay = ('birthday')

    def get_inline_instances(self, request, obj=None):
        if not obj:
            return list()
        return super(CustomUser, self).get_inline_instances(request, obj)


admin.site.unregister(User)
admin.site.register(User, CustomUser)
我在这里读到,
list\u display
应该完成所有的工作,但在我的情况下,它不起作用。自从我添加了那一行后,我在管理面板中没有看到任何变化

问题在哪里?谢谢


编辑:通过使用
列表显示更改
列表显示来修复。现在我明白了:
类型对象“User”没有属性“birth”
。有什么想法吗?

您有一个输入错误:
list\u diplsay
应该是
list\u display
。您可能还应该在列表值后面添加一个逗号:
(“生日”)
。这确保了最终得到的是一个元组,而不是一个值

编辑:

由于
生日
字段不属于
用户
,因此您必须添加一个方法,以便在admin类中查找该字段:

class CustomUser(UserAdmin):
    list_display = ('birthday',)

    def birthday(self, obj):
        return obj.profile.birthday

(我只展示了admin类的相关部分;您现有的
内联线应保持不变。)

为此,您应该使用list。它最初是为了节省内存而设计的,但现在已经无关紧要了<代码>=['birth']
是的,那可能也行。我们实际上不知道OP使用的是什么版本的Django。现在我明白了:
type对象“User”没有属性“birth”
。有什么想法吗?谢谢@克里斯,是的。非常感谢。