如何让Django的admin中某一个model的某一个值是无法手动修改的,比如说有一个class是员工信息,其中的出生日期一项直接由身份证号的7~14位自动填充,而不能手动填写
时间: 2024-03-28 20:41:21 浏览: 15
你可以在该model的admin.py文件中定义一个自定义的ModelForm,并在该form中重写出生日期的字段,将其设置为只读状态。具体操作如下:
1. 在该model的admin.py文件中导入该model和forms模块:
```python
from django.contrib import admin
from .models import EmployeeInfo
from .forms import EmployeeInfoForm
```
2. 定义一个自定义的ModelForm,并在该form中重写出生日期的字段:
```python
class EmployeeInfoForm(forms.ModelForm):
class Meta:
model = EmployeeInfo
fields = '__all__'
# 重写出生日期字段
def __init__(self, *args, **kwargs):
super(EmployeeInfoForm, self).__init__(*args, **kwargs)
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['birthday'].widget.attrs['readonly'] = True
```
在上面的代码中,我们通过在__init__()方法中为birthday字段设置了readonly属性,来使其成为只读字段。
3. 在该model的admin.py文件中将该自定义的ModelForm应用到该model的admin表单中:
```python
@admin.register(EmployeeInfo)
class EmployeeInfoAdmin(admin.ModelAdmin):
# 将自定义的ModelForm应用到该model的admin表单中
form = EmployeeInfoForm
```
通过以上操作,我们就可以将出生日期字段设置为只读字段,从而实现该字段的值无法手动修改,只能通过身份证号的7~14位自动填充。