如何在Django admin中禁用Item模型user字段修改,仅保留查看权限
Django Item模型user字段只读配置方案
根据你使用的场景,可选择对应实现方式:
1. Django Admin后台场景
在你的admin.py中注册Item模型时,将user加入只读字段列表即可,若需要新增时自动填充当前登录用户,可额外重写save_model方法:
from django.contrib import admin from .models import Item class ItemAdmin(admin.ModelAdmin): # 将user字段设置为只读 readonly_fields = ('user',) # 新增Item时自动赋值为当前登录用户,不需要自动赋值可删除该方法 def save_model(self, request, obj, form, change): if not change: obj.user = request.user super().save_model(request, obj, form, change) admin.site.register(Item, ItemAdmin)
2. 自定义Form表单场景
自定义ModelForm时,将user字段的disabled属性设为True即可,Django会自动忽略前端提交的该字段修改内容,保留初始值:
from django import forms from .models import Item class ItemForm(forms.ModelForm): class Meta: model = Item fields = "__all__" def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields["user"].disabled = True
3. DRF接口场景
在序列化器中设置user字段为只读即可:
from rest_framework import serializers from .models import Item class ItemSerializer(serializers.ModelSerializer): class Meta: model = Item fields = "__all__" extra_kwargs = { "user": {"read_only": True} }
提示:上述方案均为业务交互层的限制,若需要彻底禁止该字段的更新操作,可额外搭配Django
pre_save信号或者数据库触发器做校验拦截。
内容的提问来源于stack exchange,提问作者Xor0x
相关产品推荐
相关产品推荐

