Python Django用户配置文件中的自定义列
我想在Django admin的用户(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
/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”
。有什么想法吗?谢谢@克里斯,是的。非常感谢。