You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Admin如何实现模型字段仅新增时可写、其余场景只读

实现方法

你可以通过重写StockAdmin的get_readonly_fields方法,动态判断当前是新增还是编辑场景,返回对应的只读字段列表,具体代码如下:

from django.contrib import admin
from .models import Stock

class StockAdmin(admin.ModelAdmin):
    list_display = []
    
    def get_readonly_fields(self, request, obj=None):
        # obj不为None代表是编辑已有记录的场景
        if obj:
            # 编辑时把_total_subs也加入只读字段
            return ['_sold_out_subs', '_total_subs']
        # 新增场景只保留原有只读字段
        return ['_sold_out_subs']
    
    class Meta:
        model = Stock

# 别忘了注册模型
admin.site.register(Stock, StockAdmin)

逻辑说明

  • 当你打开新增Stock记录的页面时,obj参数为None,此时_total_subs字段可正常编辑
  • 当你打开已存在的Stock记录的编辑页面时,obj为当前要修改的Stock实例,此时_total_subs会被加入只读字段列表,无法修改
  • 原有_sold_out_subs始终只读的逻辑不受影响

内容的提问来源于stack exchange,提问作者Javad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:36:03