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

Django TabularInline,只有readonly_fields,但我的FK对象仍然显示并可编辑

Django TabularInline是Django框架中的一个内联表单集,用于在父模型的编辑页面中以表格形式展示子模型的相关信息。它允许在父模型的编辑页面中直接对子模型进行增删改操作。

在使用TabularInline时,如果只想将某些字段设置为只读(readonly),可以通过在TabularInline类中使用readonly_fields属性来实现。这样,这些字段将显示为只读状态,用户无法编辑它们。

然而,当使用readonly_fields属性时,外键(ForeignKey)字段的对象仍然会显示并且可编辑。这是因为readonly_fields属性只能控制字段的只读状态,而无法控制字段的编辑性。

如果希望外键字段的对象也显示为只读并且不可编辑,可以通过重写TabularInline类的get_readonly_fields方法来实现。在该方法中,可以根据需要返回一个包含所有字段的元组,使所有字段都显示为只读状态。

以下是一个示例代码:

代码语言:python
复制
from django.contrib import admin
from django.contrib.admin import TabularInline

class MyTabularInline(TabularInline):
    model = MyModel
    readonly_fields = ('field1', 'field2')

    def get_readonly_fields(self, request, obj=None):
        if obj:  # 编辑模式下
            return self.readonly_fields + ('foreign_key_field',)  # 将外键字段添加到只读字段中
        return self.readonly_fields

class MyParentModelAdmin(admin.ModelAdmin):
    inlines = [MyTabularInline]

admin.site.register(MyParentModel, MyParentModelAdmin)

在上述示例中,通过重写get_readonly_fields方法,在编辑模式下将外键字段添加到只读字段中,从而使外键字段的对象也显示为只读并且不可编辑。

对于Django TabularInline的应用场景,它适用于需要在父模型的编辑页面中直接对子模型进行增删改操作的情况。例如,一个订单模型和订单商品模型之间存在一对多关系,可以使用TabularInline将订单商品模型嵌入到订单模型的编辑页面中,方便用户直接在订单编辑页面中管理订单商品。

推荐的腾讯云相关产品和产品介绍链接地址如下:

  1. 云服务器(CVM):提供弹性计算能力,满足各类业务需求。详情请参考:云服务器产品介绍
  2. 云数据库 MySQL 版(CDB):提供高性能、可扩展的关系型数据库服务。详情请参考:云数据库 MySQL 版产品介绍
  3. 云存储(COS):提供安全可靠、高扩展性的对象存储服务。详情请参考:云存储产品介绍

请注意,以上推荐的腾讯云产品仅供参考,具体选择应根据实际需求进行评估和决策。

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

相关·内容

Admin组件

Admin使用 Django 提供了基于 web 管理工具。 Django 自动管理工具是 django.contrib 一部分。...(admin.ModelAdmin): readonly_fields = ('user',) 15 fieldsets,详细页面时,使用fieldsets标签对数据进行分割显示 @admin.register...单例模式 单例模式(Singleton Pattern)是一种常用软件设计模式,该模式主要目的是确保 某一个类只有一个实例存在 。...如果在程序运行期间,有很多地方都需要使用配置文件内容,也就是说,很多地方都需要创建 AppConfig 对象实例,这就导致系统中存在多个 AppConfig 实例对象,而这样会严重浪费内存资源,尤其是在配置文件内容很多情况下...因此,我们只需把相关函数和数据定义在一个模块中,就可以获得一个单例对象了。

1.6K30

Django admin管理工具使用、定制及源码解析

,该模式主要目的是确保某一个类只有一个实例存在。...3、一对多关联 还有一种比较特殊情况,父子表情况。编辑父表之后,再打开子表编辑,而且子表只能一条一条编辑,比较麻烦。 这种情况,我们也是可以处理,将其放在同一个编辑界面中。...4.设置只读字段 在使用admin时候,ModelAdmin默认对于model操作只有增加,修改和删除,但是总是有些字段是不希望用户来编辑。...为每个对象自定义 action 有时候你需要在单个对象上执行特定 action。...最终生成结果就是可以选择所有的省,也可以选择所有的市,这并不合理,正确应该是在选择某个省时候在市下拉列表里只有该省城市。 而,django原生并不能做到这么智能。

4K40

Django admin 一些有用设置

',)        #list_editable 设置默认可编辑字段     list_editable = ['machine_room_id', 'temperature']        #fk_fields...设置显示外键字段      fk_fields = ('machine_room_id',) 此处比较简单,自己尝试一下即可。...3、一对多关联 还有一种比较特殊情况,父子表情况。编辑父表之后,再打开子表编辑,而且子表只能一条一条编辑,比较麻烦。 这种情况,我们也是可以处理,将其放在同一个编辑界面中。...4.设置只读字段  在使用admin时候,ModelAdmin默认对于model操作只有增加,修改和删除,但是总是有些字段是不希望用户来编辑。...9.自定义列表字段 上面的一对多和多对多可以数据编辑显示,但在列表中没有显示。有时还需要显示一些其他东西。例如两个字段相乘计算结果等等。这些都可以通过自定义列表字段处理和显示

2.5K70

从0开始做系统

前面已经写了如何做接口,那是方便调用。现在写个如何做后台系统,是方便操作Django自带后台管理是Django明显特色之一,可以让我们快速便捷管理数据。...list_select_related,列表时,连表查询是否自动select_related list_editable,列表时,可以编辑列 search_fields,列表时,模糊搜索功能 date_hierarchy...模板 raw_id_fields,详细页面,针对FK和M2M字段变成以Input框形式 fields,详细页面时,显示字段字段 exclude,详细页面时,排除字段 readonly_fields,...,详细页面时,使用radio显示选项(FK默认使用select) form = ModelForm,用于定制用户请求时候表单验证 可以参考: django admin高级扩展 简单定制了一下: from...list_display_links = ['id','leader_name'] list_filter = ["name", "department","leader_name"] #列表时,可以编辑

1.4K30

Django 2.1.7 Admin - 编辑页选项

Django 2.1.7 Admin管理后台文章 Django 2.1.7 Admin管理后台 - 注册模型、自定义显示列表字段 Django 2.1.7 Admin - 列表页选项 参考文献 https...(admin.ModelAdmin): fields = ['server_intranet_ip', 'server_hostname','server_internet_ip'] # 设置编辑显示字段...# 设置返回主机名 def __str__(self): return self.server_hostname 2)刷新浏览器效果如下图: 编辑显示关联对象数据...在一对多关系中,可以在一端编辑页面中编辑多端对象,嵌入多端对象方式包括表格、块两种。...类型InlineModelAdmin:表示在模型编辑页面嵌入关联模型编辑。子类TabularInline:以表格形式嵌入。子类StackedInline:以块形式嵌入。

97330

Django项目于之在线教育平台网站实战开发(完结)

3.xadmin后台管理中字段设置为只读 在课程数据中如点击数丶收藏认识丶学习人数应该是只读而不能进行修改编辑 在注册类中添加readonly_fields属性指向要只读字段 readonly_fields...,使用下拉框就没有搜索框来方便 在organization/adminx中找到外键所指向注册类,在该类中设置样式 relfield_style = 'fk-ajax' 刷新页面,在选择课程机构时则成功显示出搜索框...admin那样去做到在一个页面直接添加外键信息,在课程管理adminx中需要定义一个类LessonInline,通过课程注册类中添加inlines属性指向LessonInline对象即可达到效果...,只有13条,总共课程16条数据,轮播课程3条,所以数据筛选正确 8.list_editable属性 在课程注册类CourseAdmin中添加list_editable属性,这个属性可以在列表中对设定字段直接进行编辑...富文本编辑器) 说明: django ueditor富文本编辑集成 1.Xadmin插件制作官方中文文档 Xadmin 插件制作 — Django Xadmin 2.1.5 beta documentation

1.2K30

Django 1.10中文文档-第一个应用Part7-自定义管理站点

目前表单只有两个字段可能看不出什么,但是对于一个字段很多表单,设计一个直观合理排序方式非常重要。...Django在admin站点中,自动地将所有的外键关系展示为一个select框。在我们例子中,目前只有一个question对象存在。 请注意图中绿色加号,它连接到Question模型。...:Choice对象将在Question管理页面进行编辑,默认情况,请提供3个Choice对象编辑区域。...为此,Django提供了一种扁平化显示方式,你仅仅只需要将ChoiceInline继承类改为admin.TabularInline: # polls/admin.py class ChoiceInline...使用TabularInline代替`StackedInline``,相关对象将以一种更紧凑表格形式显示出来: ? 注意,这样多了一个"删除"选项,它允许你删除已经存在Choice.

3.6K60

Django 上传图片和Admin站点5.2

上传图片 当Django在处理文件上传时候,文件数据被保存在request.FILES FILES中每个键为中name 注意:FILES只有在请求方法为...否则,FILES 将为一个空类似于字典对象 使用模型处理上传文件:将属性定义成models.ImageField类型 pic=models.ImageField(upload_to='cars/')...项中加入django.contrib.admin,Django就会自动搜索每个应用admin模块并将其导入 ModelAdmin对象 ModelAdmin类是模型在Admin界面中表示形式 定义:定义一个类...类型InlineModelAdmin:表示在模型添加或修改页面嵌入关联模型添加或修改 子类TabularInline:以表格形式嵌入 子类StackedInline:以块形式嵌入 class.../templates)将模板页面的源文件admin/base_site.html拷贝到第一步建好目录里 编辑base_site.html文件 刷新页面,发现以刚才编辑页面效果显示 其它管理后台模板可以按照相同方式进行修改

45730

Django教程 —— 初步完善图书管理系统

admin.TabularInline: 嵌入编辑关联对象编辑样式为表格式类 admin.StackedInline: 嵌入编辑关联对象编辑样式为堆放式类 model: 关联对象...extra: 嵌入编辑对象个数 list_per_page: 数据分页,每页数据个数 search_fields: 查询字段 # -*- coding:utf-8 -*- """ @Author...1 # 嵌入编辑对象个数 class BookInfoInline(admin.TabularInline): model = HeroInfo extra...,之前 BookInfo 只有 title、author、pub_date,现在则多了 book_type、isbn、book_desc、book_detail等属性。...图书类型分页效果图 图书信息过滤效果图 嵌入编辑关联对象(堆放式) 在编辑图书类型时候,会在下面根据 extra 属性值内嵌入关联对象(图书信息)个数 嵌入编辑关联对象(表格式)

51820

Django学习笔记 1.7 自定义 admin 站点

作者: iotisan 前言 这节笔记将更加深入地处理 admin 站点,包括修改表单更加直观呈现模型数据,快速添加关联对象,以及后台涉及列表展示、过滤器、搜索框等操作。...通常来说,你期望能自定义表单外观和工作方式。你可以在注册模型时将这些设置告诉 Django。...:“Choice 对象要在 Question 后台页面编辑。...默认提供 3 个足够选项字段。” 3 自定义后台更改列表 3.1 显示列表 默认情况下,Django 显示每个对象 str() 返回值。但有时如果我们能够显示单个字段,它会更有帮助。...为此,使用 list_display 后台选项,它是一个包含要显示字段名元组,在更改列表页中以列形式展示这个对象: class QuestionAdmin(admin.ModelAdmin):

98220

零基础使用Django2.0.1打造在线教育网站(二十六):xadmin进阶开发

,具体包括自定义icon,默认排序,字段只读,字段隐藏,搜索框,inlines,一张表分两个model来进行管理添加数据,直接列表页编辑,列表页显示章节数,显示自定义html代码,列表页定时刷新,字段联动功能...就是这个样子: [1240] 刷新一下我们后台页面: [1240] 直接列表页编辑 在courses/adminx.py文件CourseAdmin函数,新增一行代码: # 直接列表页编辑...,统计课程数就会少一个 obj.save() # 必须确定存在 if obj.course_org is not None: # obj实际是一个course对象...Django admin封装和进阶开发,正所谓青出于蓝而胜于蓝就是这个理。...,自己尝试做一个插件:富文本编辑器。

1.3K20

Django教程 —— 初步完善图书管理系统

admin.TabularInline: 嵌入编辑关联对象编辑样式为表格式类 admin.StackedInline: 嵌入编辑关联对象编辑样式为堆放式类 model: 关联对象...extra: 嵌入编辑对象个数 list_per_page: 数据分页,每页数据个数 search_fields: 查询字段 # -*- coding:utf-8 -*- """ @Author...1 # 嵌入编辑对象个数 class BookInfoInline(admin.TabularInline): model = HeroInfo extra...,之前 BookInfo 只有 title、author、pub_date,现在则多了 book_type、isbn、book_desc、book_detail等属性。...图书类型分页效果图 图书信息过滤效果图 嵌入编辑关联对象(堆放式) 在编辑图书类型时候,会在下面根据 extra 属性值内嵌入关联对象(图书信息)个数 嵌入编辑关联对象

94621

使用Django实现把两个模型类数据聚合在一起

Django中想要把模型类聚合得到想要数据可以用F对象。 比如有模型类A和B,A和B之间有外键关联在一起,A是子表,B是父表(反过来没试过。。...我看到网上有说F对象可以这样用F(‘b__id’) == F(‘模型类名小写__字段名’),此处是双下划线。 但是我用Django2.0时会报错。。真是搞不懂,后来我直接使用字段名居然可以,醉了。...Admin页面显示父表,编辑子表 默认情况下,ModelAdmin只允许您管理模型“本身”字段,而不是相关模型.以下方法将实现,在应用类列表管理显示页面,显示父表字段;在编辑页面,父表对子表进行编辑...使用DjangoTabularInline,可以解决这个问题,在父表里对子表进行编辑: 所有代码都在admin.py里写,具体如下: # 一对多关联表编辑,让父表管理配置页面能同时编辑子表,以下Score...为子表(有外键所在表) class ScoreInline(admin.TabularInline): # Score 必须是models.py中模型名称,大小写必须要匹配.这个模型为子表,以便可以被父表编辑

1.4K20
领券