我用这个扩展了用户模型:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
biography = models.TextField(max_length=500, blank=True, default='Tell us about you...')
tagline = models.CharField(max_length=200, blank=True, default=' ')
并附上admin.py:
class UserProfileInline(admin.StackedInline):
model = UserProfile
can_delete = False
verbose_name_plural = 'User Profile'
verbose_name = 'Additional Info'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline, )
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
# Register your models here.
admin.site.register(Product)
在显示verbose_name的管理面板中,它显示Additional Info: UserProfile object
- 不确定UserProfile object
的来源。我在下面附上了截图:
有没有办法删除它,其他使用CSS隐藏它?
答案 0 :(得分:1)
您需要覆盖模型的__str__
方法:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
biography = models.TextField(max_length=500, blank=True, default='Tell us about you...')
tagline = models.CharField(max_length=200, blank=True, default=' ')
def __str__(self):
return self.user.username
请注意,这将呈现您也可以执行的username
:
self.first_name
或
self.last_name
修改强>
因为你想把它变成空白,唯一的办法就是返回一个这样的空间,
return ' ' #must add a space
原因是__str__
必须返回字符串类型对象。因此,返回None
或''
之类的内容会导致错误。