要实现在保存时不要求填写的字段显示为必填字段,可以通过以下代码示例来解决:
from django import forms
from django.contrib import admin
from django.db import models
# 定义模型
class MyModel(models.Model):
field1 = models.CharField(max_length=100)
field2 = models.CharField(max_length=100, blank=True) # 允许为空
def save(self, *args, **kwargs):
# 在保存时检查是否填写了字段,如果没有填写则设置为None
if not self.field2:
self.field2 = None
super().save(*args, **kwargs)
# 定义表单
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
fields = '__all__'
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# 移除不要求填写的字段的必填属性
self.fields['field2'].required = False
# 在后台管理中使用自定义表单
class MyModelAdmin(admin.ModelAdmin):
form = MyModelForm
# 注册模型和后台管理
admin.site.register(MyModel, MyModelAdmin)
在上述代码中,我们定义了一个模型MyModel
,其中field2
字段使用了blank=True
参数,表示允许为空。在模型的save()
方法中,我们通过检查field2
字段是否为空来设置其值为None
,以确保保存时不要求填写的字段的值为空。
然后,我们定义了一个自定义的表单MyModelForm
,继承自forms.ModelForm
,并在其__init__()
方法中移除了不要求填写的字段field2
的必填属性。
最后,我们在后台管理中使用自定义表单MyModelForm
,通过form = MyModelForm
将其应用于MyModelAdmin
。这样,在后台管理中保存模型时,不要求填写的字段field2
将显示为非必填字段。