django admin 设置字段不可编辑

在Django中,如果你想让管理员在后台管理界面中无法编辑某个字段,你可以通过在模型的Meta类中设置editable属性为False,或者在admin.py文件中使用readonly_fields属性来实现。

方法1:在模型中使用Meta类设置

你可以在模型的Meta类中设置editable属性为False,这样在Django的后台管理界面中,这个字段就不会被显示为可编辑的。

css 复制代码
from django.db import models
 
class MyModel(models.Model):
    name = models.CharField(max_length=100, editable=False)
 
    class Meta:
        pass  # 其他元选项可以放在这里

方法2:在admin.py中使用readonly_fields

如果你不希望在模型级别禁用编辑,而是想在特定的admin界面中禁用某些字段的编辑,你可以在admin类中使用readonly_fields属性。

css 复制代码
from django.contrib import admin
from .models import MyModel
 
class MyModelAdmin(admin.ModelAdmin):
    readonly_fields = ('name',)  # 将'name'字段设置为只读
 
admin.site.register(MyModel, MyModelAdmin)

方法3:自定义表单字段的渲染

如果你想要进一步控制字段的显示方式(例如,即使设置为只读,也希望显示为一个普通的文本字段而不是灰色),你可以通过自定义admin表单来实现。

css 复制代码
from django.contrib import admin
from django import forms
from .models import MyModel
 
class MyModelForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        self.fields['name'].disabled = True  # 禁用编辑,但仍显示为文本框(在某些浏览器中可能看起来像只读)
 
class MyModelAdmin(admin.ModelAdmin):
    form = MyModelForm
 
admin.site.register(MyModel, MyModelAdmin)

方法4:使用JavaScript或CSS隐藏输入框(不推荐)

虽然这种方法可以实现隐藏输入框的效果,但它并不是真正意义上的"不可编辑",因为用户仍然可以通过开发者工具修改这些隐藏的输入框。因此,这不是一个安全的做法。但如果你只是想在视觉上隐藏这些字段,可以这样做:

css 复制代码
<script>
    document.addEventListener('DOMContentLoaded', (event) => {
        document.getElementById('id_name').style.display = 'none';  // 假设字段ID是'id_name'
    });
</script>

或者使用CSS:

css 复制代码
#id_name { display: none; }

这种方法应该在自定义模板的JavaScript或CSS文件中使用,而不是直接在Django的admin模板中修改。

结论

推荐使用方法1和方法2,它们提供了真正的不可编辑的解决方案,并且是Django官方推荐的做法。方法3虽然可以实现类似的效果,但在某些情况下可能不完全符合需求,尤其是在涉及到表单验证的情况下。方法4虽然在某些情况下可用,但不推荐用于安全或功能性的需求。

相关推荐
局外人LZ21 小时前
django rest framework:从零开始搭建RESTful API
python·django·restful·drf
weixin_421133411 天前
Django 的文档接口
python·django·sqlite
合作小小程序员小小店3 天前
web开发,学院培养计划系统,基于Python,FlaskWeb,Mysql数据库
后端·python·mysql·django·web app
B站_计算机毕业设计之家3 天前
推荐系统实战:python新能源汽车智能推荐(两种协同过滤+Django 全栈项目 源码)计算机专业✅
大数据·python·django·汽车·推荐系统·新能源·新能源汽车
茯苓gao3 天前
Django网站开发记录(一)配置Mniconda,Python虚拟环境,配置Django
后端·python·django
码界筑梦坊3 天前
267-基于Django的携程酒店数据分析推荐系统
python·数据分析·django·毕业设计·echarts
Cherry Zack3 天前
Django视图进阶:快捷函数、装饰器与请求响应
后端·python·django
花菜会噎住3 天前
Django视图与路由全解析:从URL到页面,一篇讲透
数据库·django·sqlite·函数
wxin_VXbishe4 天前
基于SpringBoot的天天商城管理系统的设计与现-计算机毕业设计源码79506
java·c++·spring boot·python·spring·django·php
星哥说事5 天前
Python自学25 - Django快速上手
开发语言·python·django