首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有id属性的只读Django ModelAdmin表单域

在Django框架中,ModelAdmin 是用于定制模型在管理后台中的展示和操作行为的类。当我们需要创建一个只读的表单域时,可以通过重写 ModelAdmin 类的 get_readonly_fields 方法来实现。

基础概念

ModelAdmin: Django管理后台中的一个类,用于定制模型的展示和操作。 只读字段: 在表单中不可编辑的字段,通常用于显示数据但不允许用户修改。

相关优势

  1. 安全性: 防止用户误操作或恶意修改重要数据。
  2. 用户体验: 明确指示哪些信息是不可更改的,减少用户的困惑。

类型与应用场景

  • 固定数据: 如创建时间、修改时间等自动填充的字段。
  • 敏感信息: 如用户ID、订单号等不应被随意更改的数据。
  • 计算字段: 如基于其他字段计算得出的值。

示例代码

假设我们有一个 Book 模型,其中 id 字段是自动生成的主键,我们希望在管理后台中将其设置为只读。

代码语言:txt
复制
from django.contrib import admin
from .models import Book

class BookAdmin(admin.ModelAdmin):
    # 设置只读字段
    readonly_fields = ('id',)

# 注册模型和自定义的ModelAdmin
admin.site.register(Book, BookAdmin)

可能遇到的问题及解决方法

问题: 即使设置了 readonly_fields,字段仍然显示为可编辑。

原因: 可能是因为其他地方的代码覆盖了这个设置,或者是在表单中进行了特殊处理。

解决方法:

  1. 确保 readonly_fields 设置在正确的 ModelAdmin 类中。
  2. 检查是否有自定义表单覆盖了这个设置。
  3. 使用 get_readonly_fields 方法动态设置只读字段,以应对更复杂的情况。
代码语言:txt
复制
class BookAdmin(admin.ModelAdmin):
    def get_readonly_fields(self, request, obj=None):
        # 动态返回只读字段列表
        return ['id']

通过这种方式,可以确保无论何时何地,id 字段都会被正确地设置为只读状态。

总结

通过合理使用 ModelAdminreadonly_fieldsget_readonly_fields 方法,可以有效地控制管理后台中字段的可编辑性,从而提高系统的安全性和用户体验。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用

    QueryDict 在HttpRequest对象中,GET和POST属性是django.http的实例。QueryDict类。 QueryDict是一个用户定义的类,类似于字典。...csrf的全称是跨站点请求伪造。这是Django提供的防止伪装提交请求的功能。POST方法提交的表单必须具有此标签。...字段属性定义要显示的字段。 因为这个类对应于Contact数据模型,所以我们需要在注册时一起注册它们。...返回的数据是QuerySet类型,类似于列表。它包含满足条件的模型类的对象。可以使用索引下标来检索模型类的对象。 Pk=3意味着主键=3,这相当于id=3。...由于id在pychar中具有特殊含义,它指的是内存地址的内置函数id(),因此使用pk。

    1.7K20

    Django管理应用程序的高级配置在BookInstance模型的运用【Django】

    Django管理应用程序 Django管理应用程序可以使用的模型自动构建可用于创建、查看、更新和删除记录的站点区域。这可以在开发过程中节省大量时间,使测试模型和查看是否有正确的数据变得容易。...为了查看和创建记录,我们还需要用户拥有所有对象的记录。可以创建一个“超级用户”帐户,该帐户具有对网站的完全访问权限和使用manage.py所需的所有权限 调用下一个命令。...python3 manage.py runserver 高级配置 Django使用注册模型信息创建基本管理站点: 每个模型都有一个单独的记录列表,由__ str__()方法创建并链接到详细视图/表单以进行编辑的字符串...ID使用。...这是通过使用_过滤器属性列出要完成的字段来完成的。用BookInstanceAdmin下面的代码段替换当前类。

    1.7K20

    Django 2.1 版本已经来袭

    在几天前,即 8 月 1 号,Django 官方团队发布 Django 2.1 版本。 新版本发布,我们可以不用急于更新替换,但要关注新版本的发布内容。我看了下官方的发布公告,总结几个重要的点。...这也意味着在 Model 的 Meta 配置选项中, default_permissions 属性默认值变为 ('add', 'change', 'delete', 'view')。...View 权限同样也适用于 admin,它可以给用户指定只读权限。这里是通过 ModelAdmin.has_view_permission(request, obj=None) 来设置。...如果希望一个 obj 被设置成只读属性,那么要返回 True。 3 模型 新版本的 Model 类也一些特性,我也列举出比较重要的点。...在模型的表单中,BinaryField 可以被设置为 editable=True。 4 表单 表单(Forms)中的 ImageField 组件新增 accept="image/*" 属性。

    57520

    Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段

    、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块。...在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。 Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...属性list_display表示要显示哪些属性 class ServerInfoAdmin(admin.ModelAdmin): list_display = ['id', 'server_hostname...(admin.ModelAdmin): list_display = ['id', 'server_hostname', 'server_intranet_ip','server_internet_ip

    2.8K40

    Admin站点

    AppConfig.verbose_name 属性用于设置该应用的直观可读的名字,此名字在Django提供的Admin管理站点中会显示, 注册模型类 登录后台管理后,默认没有我们创建的应用中定义的模型类...在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。 ?...定义与使用Admin管理类 Django提供的Admin站点的展示效果可以通过自定义ModelAdmin类来进行控制。...定义管理类需要继承自admin.ModelAdmin类,如下 from django.contrib import admin class BookInfoAdmin(admin.ModelAdmin...列表中的列 class BookInfoAdmin(admin.ModelAdmin): ... list_display = ['id','btitle'] ?

    2.2K20

    Django 2.1.7 Admin - 注册模型、自定义显示列表字段

    Admin站点 内容发布的部分由网站的管理员负责查看、添加、修改、删除数据,开发这些重复的功能是一件单调乏味、缺乏创造力的工作,为此,Django能够根据定义的模型类自动地生成管理模块。...在列表页中点击"增加"可以进入增加页,Django会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...4.自定义管理页面 在列表页只显示出了ServerInfo object,对象的其它属性并没有列出来,查看非常不方便。Django提供了自定义管理页面的功能,比如列表页要显示哪些值。...属性list_display表示要显示哪些属性 class ServerInfoAdmin(admin.ModelAdmin): list_display = ['id', 'server_hostname...(admin.ModelAdmin): list_display = ['id', 'server_hostname', 'server_intranet_ip','server_internet_ip

    1.1K20

    Django(1)初识Django「建议收藏」

    Django有许多功能强大的第三方插件,可以很方便地开发出自己的工具包,这使得Django具有很强的可扩展性。...Django基于MTV的设计十分优美,其具有以下特点: 对象映射关系(Object Relational Mapping, ORM):通过定义映射类来构建数据模型,将模型与关系数据库连接起来,使用ORM...URL设计:开发者可以设计任意的URL(网站地址),而且还支持使用正则表达式设计 模板系统:提供可扩展的模板语言,模板之间具有可继承性 表单处理:可以生成各种表单模型,而且表单具有有效性检验功能 Cache...功能的导入由模块Django.urls实现,如from Django.urls import include,path,re_path Admin后台系统:支持主流移动设备并新增属性ModelAdmin.autocomplete_fields...和方法ModelAdmin,get_autocomplete_fields() 用户认证:PBKDF2密码哈希默认的迭代次数从36000增加到100000 Cache(缓存):cache.set_many

    2.8K20

    django:DateTimeField如何自动设置为当前时间并且能被修改 ——django日期时间字段的使用

    需要注意的是,设置该参数为true时,并不简单地意味着字段的默认值为当前时间,而是指字段会被“强制”更新到当前时间,你无法程序中手动为字段赋值;如果使用django再带的admin管理器,那么该字段在admin...中是只读的。...该属性通常被用在存储“创建时间”的场景下。与auto_now类似,auto_now_add也具有强制性,一旦被设置为True,就无法在程序中手动为字段赋值,在admin中字段也会成为只读的。 ?...editable=False将导致字段不会被呈现在admin中,blank=Ture表示允许在表单中不输入值。...readonly_fields中: class YourAdmin(admin.ModelAdmin): readonly_fields = ('save_date', 'mod_date',)

    7.2K80

    Django教程 —— 站点后台管理

    那么问题来了,老板说我们需要在建立一个新网站,是不是还要设计一个页面来实现对新网站数据库的增删改查操作,但是这样的页面具有一个很大的重复性,那有没有一种方法能够让我们很快的生成管理数据库表的页面呢?...增加/修改 目前暂时没有图书信息,在列表页中点击"增加"可以进入增加页,Django 会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...打开 admin.py 文件,自定义类,继承自 admin.ModelAdmin 类。...属性list_display表示要显示哪些属性 class BookInfoAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'author...'] 设置了id排序字段,表会按照id的升序排序,如需降序,则改成 ordering = ['-id'] 即可。

    2.1K10

    Django教程 —— 站点后台管理

    那么问题来了,老板说我们需要在建立一个新网站,是不是还要设计一个页面来实现对新网站数据库的增删改查操作,但是这样的页面具有一个很大的重复性,那有没有一种方法能够让我们很快的生成管理数据库表的页面呢?...增加/修改 目前暂时没有图书信息,在列表页中点击"增加"可以进入增加页,Django 会根据模型类的不同,生成不同的表单控件,按提示填写表单内容后点击"保存",完成数据创建,创建成功后返回列表页。...打开 admin.py 文件,自定义类,继承自 admin.ModelAdmin 类。...属性list_display表示要显示哪些属性 class BookInfoAdmin(admin.ModelAdmin): list_display = ['id', 'title', 'author...'] 设置了id排序字段,表会按照id的升序排序,如需降序,则改成 ordering = ['-id'] 即可。

    1.6K20

    django入门:Admin管理系统及表单(干货)

    这一部分将介绍 django 自带的后台管理系统,以及如何通过表单提交数据 django admin 后台管理系统 在后台管理系统注册创建的模型 from django.contrib import admin...', 'category', 'author'] # 需要展示的字段 # 或者通过以下方式注册,效果是一样的 class PostAdmin(admin.ModelAdmin) list_display...admin 管理界面 为了可以和用户进行交流,我们需要获取用户的一些评论之类的,所以我们需要通过表单让用户提交信息,接下来我们将了解下 django 的表单 django 表单 存在相应模型(POST...(request.POST) # 判断表单是否有效,django 自动校验表单数据是否合理,根据模型的字段类型来判断 if form.is_valid():...提交反馈错误 类似搜索的表单(GET) 1.创建表单视图 def search(request): # 获取到用户提交的搜索关键词,字典的键值同模版中的 name 属性值 q = request.GET.get

    3K21

    Django Admin 后台自定制技巧

    Django最强大的部分之一是自动管理界面。它从模型中读取元数据,以提供一个快速的,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。管理员的建议用法仅限于组织的内部管理工具。...import admin from MyWeb.models import * # 必须继承ModelAdmin基类,才可以调整参数,HostDB则是你的表的名称 @admin.register(HostDB...import admin from MyWeb.models import * # 必须继承ModelAdmin基类,才可以调整参数,HostDB则是你的表的名称 @admin.register(HostInfo...import admin from MyWeb.models import * # 必须继承ModelAdmin基类,才可以调整参数,HostDB则是你的表的名称 @admin.register(HostInfo...,我们自己增加新的. # name: admin.py from django.contrib import admin from MyWeb.models import * # 必须继承ModelAdmin

    1.4K20
    领券