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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:24:01