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

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

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

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

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

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

以下是一个示例代码:

代码语言:python
代码运行次数:0
复制
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):提供安全可靠、高扩展性的对象存储服务。详情请参考:云存储产品介绍

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

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

相关·内容

领券