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虽然在某些情况下可用,但不推荐用于安全或功能性的需求。

相关推荐
叫我:松哥2 小时前
基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
人工智能·爬虫·python·算法·django·数据可视化·朴素贝叶斯
工业甲酰苯胺5 小时前
Django集成Swagger全指南:两种实现方案详解
python·django·sqlite
我的ID配享太庙呀10 小时前
从零开始:在 PyCharm 中搭建 Django 商城的用户注册与登录功能(轮播图+商品页-小白入门版)
数据库·python·django·sqlite·web·教育电商
叫我:松哥13 小时前
优秀案例:基于python django的智能家居销售数据采集和分析系统设计与实现,使用混合推荐算法和LSTM算法情感分析
爬虫·python·算法·django·lstm·智能家居·推荐算法
PythonicCC15 小时前
Django模板系统
数据库·django
ku_code_ku1 天前
Django关于ListView通用视图的理解(Cursor解释)
python·django·sqlite
Ice__Cai1 天前
Django Models详解:数据库模型的核心
数据库·python·sql·mysql·django
T - mars1 天前
DRF - 博客列表API
django
【本人】2 天前
Django基础(五)———模板结构
后端·python·django