Django admin后台UserProfile数据已入库但列表页不显示如何解决
问题根因
你在UserProfile模型中自定义了过滤性质的模型管理器,但没有保留Django默认的全局查询管理器:
- 你自定义的
UserProfileManager的get_queryset方法默认过滤仅返回city='London'的数据 UserProfile模型仅配置了london = UserProfileManager()这一个管理器,覆盖了Django默认的objects管理器- Django Admin默认调用模型定义的第一个管理器做数据查询,只要你入库的3条数据
city字段值不是London,Admin页面就会查询不到任何结果
解决方法
方案1:保留自定义管理器,同时恢复默认全局查询能力
在UserProfile模型中补充默认管理器定义,且放在自定义管理器前面,这样Admin会优先用默认管理器查询全量数据,同时你还可以继续通过UserProfile.london.all()查询伦敦地区的用户:
class UserProfile(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE, default='', primary_key=True,) description = models.CharField(max_length=100, default='') city = models.CharField(max_length=100, default='') website = models.URLField(default='') phone = models.IntegerField(default=0) image = models.ImageField(upload_to='profile_image', blank=True) # 新增默认全局管理器 objects = models.Manager() london = UserProfileManager() def __str__(self): return self.user.username
方案2:不需要自定义过滤管理器则直接删除相关代码
如果没有按城市过滤查询的需求,直接删掉UserProfileManager类定义和london = UserProfileManager()这行代码即可恢复默认查询逻辑。
额外排查注意项
如果修改完成后还是看不到数据,可以做以下检查:
- 确认你登录Admin后台的账号有
polls.view_userprofile权限,超级管理员默认拥有全部权限,普通账号可在权限配置页面勾选对应查看权限 - 你注释的
UserProfileAdmin类中存在拼写错误:modle = UserProfile应为model = UserProfile,后续如果要启用自定义Admin配置需要修正该错误
内容的提问来源于stack exchange,提问作者yangmoonmoon
相关产品推荐
相关产品推荐

