Django 我的app没有显示在admin里

本文探讨了App未出现在Admin中的三大常见原因:忘记在admin.site.register中注册Model类;models.py存在错误;未在settings.py的INSTALLED_APPS中添加App。通过检查这些方面可以有效定位并解决问题。

三个最常见的"我的app没有显示在admin里"的原因是
1. 忘记向admin.site.register注册你的model类
2. models.py里面有错误
3. 忘记在settings.py中得INSTALLED_APP里添加app

转载于:https://www.cnblogs.com/sandycoding/p/3960464.html

<think>我们正在处理用户的问题:用户希望在Django Admin显示多个App的内容或模块,并进行用户权限管理。 根据提供的引用,我们知道Django的权限机制是控制用户行为的关键。在Django Admin中,每个模型(通常对应一个App)的权限包括添加、更改、删除和查看。 用户希望在一个地方管理多个App的权限,这实际上是Django Admin默认提供的功能。但是,用户可能希望自定义显示多个App的内容,或者对用户权限进行更细粒度的控制。 步骤: 1. 确保每个App的模型已经在Admin注册。这样,它们才会出现在Admin的索引页面上。 2. 通过Django的用户和组权限系统,可以给用户或组分配特定模型的权限(例如:对某个模型有添加、更改、删除的权限)。 3. 如果用户希望在一个页面上显示多个App的模块,可能需要自定义Admin的模板或使用第三方插件,但Django Admin默认是按App分组的。 然而,用户的问题可能是指:如何让一个用户能够管理多个App的权限?这可以通过将用户设置为超级用户,或者给用户分配各个App的相关权限(通过组或直接分配)来实现。 具体操作: - 创建组,并为组分配多个App的权限。 - 将用户添加到该组,这样用户就继承了组的权限。 - 或者,直接给用户分配多个App的权限。 在Admin中,当用户登录后,他只能看到他有权限访问的App和模型。 根据引用[2]:权限是标记用户和组能够执行某些操作的简单方式。在Admin中,查看某个对象型的更改列表需要该对象型的更改权限。 因此,要让一个用户看到多个App的内容,需要给该用户分配这些App中各个模型的相应权限(至少是查看权限,在Django中,查看权限需要单独添加,因为默认只有添加、更改、删除)。 注意:Django 2.1开始引入了视图权限(view permission),所以如果需要用户查看模型,需要给用户分配该模型的view权限。 如何实现: 1. 在模型的Meta中,添加默认权限(包括view权限): ```python class Meta: permissions = [ ("view_modelname", "Can view modelname"), ] ``` 或者,在Django 2.1及以上版本,可以在模型中使用`default_permissions`(默认包含view)?实际上,Django2.1之后,运行`migrate`会自动为每个模型创建四个权限:add、change、delete、view。 2.Admin中,为特定用户分配多个App中模型的权限(通过用户页面或组页面)。 3. 用户登录Admin后,就会看到所有他有权限的App和模型。 如果用户希望自定义Admin界面,比如将不同App的模型放在一起显示,可以考虑自定义Admin的index模板,但通常不建议,因为Admin是按App分组的。 另一种方法:使用第三方库,如django-admin-tools,它提供了自定义仪表盘的功能,可以将不同App的模型放在同一个面板上。 但是,用户的问题核心是权限管理,即如何让一个用户拥有多个App的权限。通过上述权限分配即可实现。 因此,回答重点: - 解释Django Admin中权限分配的基本方法。 - 说明如何给用户分配多个App的权限(通过组或直接分配)。 - 提及视图权限(view)的重要性,因为如果没有view权限,即使有change权限,用户也不能看到模型列表(在Django2.1之前,change权限包含查看列表,但之后需要单独的view权限?实际上,在Django2.1中,view权限是独立的,但Admin的列表视图要求change权限?这需要澄清)。 根据Django文档:从Django 2.1开始,模型权限包括view权限。但是,在Admin中,默认情况下,只有具有某个模型的change权限的用户才能看到该模型的列表视图(即“更改列表”)。这是因为Admin的change_list视图要求用户具有`app_label.change_modelname`权限。而view权限是用于自定义视图的,Admin没有使用view权限来控制对更改列表的访问。 因此,在Django Admin中,要让用户看到某个模型的列表,需要给用户该模型的change权限(而不是view权限)。view权限可以用于我们自己的视图函数中。 所以,在Admin显示多个App的内容,需要给用户分配这些App中每个模型的change权限(或者如果是超级用户则自动拥有所有权限)。 总结步骤: 1.Admin注册所有需要管理的模型(每个Appmodels.py中定义,并在admin.py中注册)。 2. 进入Admin的“用户”页面,选择要管理的用户,在“权限”部分,直接分配权限:选择多个App的多个模型的change权限(也可以分配add、delete等)。 3. 或者,创建一个组,给组分配多个App的权限,然后将用户加入该组。 4. 用户登录Admin后,就会在索引页看到这些App的模块。 如果用户希望在一个页面上同时显示多个App的模型列表,这通常不是Admin的默认行为(Admin的索引页是按App分组的)。如果用户想要一个自定义的视图,可能需要开发自定义的Admin视图。 根据引用[3]提到,我们可以通过判断用户是否有某个权限(url代号)来控制是否显示添加、编辑、删除等按钮。在Admin中,这些按钮的显示也是基于权限的。 因此,回答用户的问题: 用户想要在Django Admin显示多个App的内容,并进行用户权限管理,可以通过分配权限来实现。用户登录后,将看到他有权限的App和模型。如果希望在一个页面显示多个App的模型,可能需要自定义Admin的索引页(使用第三方库或自定义模板)。 但是,用户的问题可能只是如何让用户看到多个App,所以重点在权限分配。 代码示例: 在admin.py中注册模型: ```python from django.contrib import admin from .models import Model1, Model2 # 假设这些模型来自不同的App admin.site.register(Model1) admin.site.register(Model2) ``` 然后,在Admin的用户编辑页面,为用户分配Model1和Model2的change权限。 或者,通过组分配: ```python from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType # 获取某个模型的权限 content_type1 = ContentType.objects.get(app_label='app1', model='model1') permissions1 = Permission.objects.filter(content_type=content_type1) content_type2 = ContentType.objects.get(app_label='app2', model='model2') permissions2 = Permission.objects.filter(content_type=content_type2) # 创建组并分配权限 group = Group.objects.create(name='Multi-app managers') group.permissions.set(permissions1 | permissions2) ``` 然后将用户加入该组。 注意:以上代码可以在Django shell中执行,或者在数据迁移中执行。 因此,回答结构: 1. 解释Django Admin的权限机制。 2. 说明如何分配权限(用户或组)。 3. 说明分配后用户在Admin中看到的效果。 4. 如果用户需要更高级的界面,建议使用第三方库或自定义模板。 生成相关问题: 1. 如何在Django中自定义Admin的索引页面? 2. 如何为Django模型添加自定义权限? 3. 如何通过代码控制用户权限(而不是使用Admin界面)?</think>### Django Admin 中管理多个 App 的用户权限 在 Django Admin显示并管理多个 App 的用户权限,主要通过以下步骤实现: --- #### 1. **注册多个 App 的模型** 在 `admin.py` 中注册所有需要管理的 App 模型: ```python # app1/admin.py from django.contrib import admin from .models import ModelA, ModelB admin.site.register(ModelA) admin.site.register(ModelB) # app2/admin.py from django.contrib import admin from .models import ModelC, ModelD admin.site.register(ModelC) admin.site.register(ModelD) ``` --- #### 2. **配置权限分组显示** Django 默认按 App 分组显示模型。确保用户有权限访问相关 App: - 用户登录 Admin 后,有权限的 App 会自动显示在首页。 - 权限不足的 App/模型会被隐藏[^2]。 --- #### 3. **分配跨 App 权限** **方法 1:通过用户直接分配** - 在 Admin → 用户编辑页 → "权限" 部分 - 勾选多个 App 的权限(如 `app1 | 添加 ModelA`, `app2 | 删除 ModelC`) **方法 2:通过用户组分配(推荐)** ```python from django.contrib.auth.models import Group, Permission # 创建组并分配权限 group = Group.objects.create(name="Multi-App Managers") permissions = Permission.objects.filter( content_type__app_label__in=["app1", "app2"] # 跨 App 选择 ) group.permissions.set(permissions) # 将用户加入组 user.groups.add(group) ``` 用户继承组权限后,可管理多个 App 的内容[^2]。 --- #### 4. **自定义权限显示(可选)** 如需在单个页面集中管理权限: ```python # admin.py from django.contrib import admin from django.contrib.auth.admin import UserAdmin class CustomUserAdmin(UserAdmin): # 重写权限字段显示 fieldsets = ( (None, {"fields": ("username", "password")}), ("多应用权限", { "fields": ("user_permissions", "groups"), # 显示所有权限 "classes": ("collapse", "wide"), }), ) admin.site.unregister(User) admin.site.register(User, CustomUserAdmin) ``` --- #### 5. **权限验证逻辑** - 在视图中检查权限: ```python if user.has_perm("app1.add_modela") and user.has_perm("app2.delete_modelc"): # 执行跨 App 操作 ``` - 在模板中控制 UI 显示: ```html {% if perms.app1.view_modela and perms.app2.change_modelc %} <a href="/multi-app-action/">显示管理按钮</a> {% endif %} ``` 根据权限动态显示界面元素[^3]。 --- ### 关键点总结 | 功能 | 实现方式 | |--------------------|--------------------------------------------------------------------------| | **显示多个 App** | 注册所有 App 模型,用户有权限的 App 自动显示 | | **集中权限管理** | 通过用户组分配跨 App 权限 | | **界面自定义** | 重写 Admin 模板或字段集,如合并权限显示区域 | | **代码级控制** | 使用 `has_perm()` 和模板标签 `perms` 验证权限[^2][^3] | > **提示**:使用用户组(Group)管理跨 App 权限是最佳实践,避免单独分配大量权限,提高可维护性[^1][^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值