Django中发送Post请求创建对象后如何将指定字段设置为只读
解决方法
你代码存在两处错误导致配置未生效,修改方案如下:
问题1:单元素元组语法错误
你代码中('start_date')不是合法的单元素元组,Python会将其识别为普通字符串,拼接时会被拆分为单个字符,无法正确识别为字段名。需要改为带逗号的('start_date',)才是正确的单元素元组写法。
问题2:Admin类未绑定Question模型
你定义的DateAdmin类需要注册到Question模型才能生效,同时建议补充创建阶段的必填校验逻辑。
正确的admin.py代码示例
from django.contrib import admin from .models import Question class QuestionAdmin(admin.ModelAdmin): # 可在此处添加你需要的其他Admin配置,比如list_display、search_fields等 def get_readonly_fields(self, request, obj=None): # 如果是编辑已存在的对象(obj不为空),设置start_date为只读 if obj: return self.readonly_fields + ('start_date',) # 新建对象时字段可正常编辑 return self.readonly_fields # 必须注册Admin类到Question模型,否则配置完全不会生效 admin.site.register(Question, QuestionAdmin)
效果验证
- 新建Question对象时,
start_date字段正常可编辑,符合必填要求 - 保存后再次进入编辑页面,
start_date字段变为只读状态,无法修改
内容的提问来源于stack exchange,提问作者user8887187
相关产品推荐
相关产品推荐

