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
相关产品推荐
相关产品推荐

