如果不用forms.ModelForm,直接用models.Model可以实现上述功能吗
时间: 2024-03-28 14:41:22 浏览: 58
可以的,你可以在该model中重写`save()`方法,从而实现通过身份证号的7~14位自动填充出生日期。具体操作如下:
1. 在该model中重写`save()`方法:
```python
class EmployeeInfo(models.Model):
# 定义员工信息的model
id_number = models.CharField(max_length=18, verbose_name='身份证号')
birthday = models.DateField(verbose_name='出生日期', null=True, blank=True)
def save(self, *args, **kwargs):
# 如果身份证号存在,则根据身份证号的7~14位计算出生日期并自动填充
if self.id_number:
birthday = self.id_number[6:14]
self.birthday = datetime.datetime.strptime(birthday, '%Y%m%d').date()
super().save(*args, **kwargs)
```
在上面的代码中,我们首先判断身份证号是否存在,如果存在,则根据身份证号的7~14位计算出生日期,并将其自动填充到`self.birthday`中。然后调用父类的`save()`方法来保存数据。
2. 在该model的admin.py文件中将该model注册到admin中:
```python
@admin.register(EmployeeInfo)
class EmployeeInfoAdmin(admin.ModelAdmin):
# 将出生日期字段设置为只读字段
readonly_fields = ('birthday',)
```
通过以上操作,我们就可以实现通过身份证号的7~14位自动填充出生日期,并将出生日期字段设置为只读字段,从而实现该字段的值无法手动修改。
阅读全文