首先,从模型表单中排除私有字段。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ["private_field"]
通常,如果我想使用与模型定义中不同的默认值,我会在视图中设置它。
if form.is_valid():
my_model = form.save(commit=False)
my_model.private_field = "default value"
my_model.save()
如果您不想在视图中设置值,我建议您覆盖 clean 方法并在那里执行。我不清楚你为什么不想这样做,或者关于不同的方法有什么更“合适”的。
class MyModelForm(forms.ModelForm):
def clean(self):
self.instance.private_field = "default value"
return super(MyModelForm, self).clean()
class Meta:
model = MyModel
exclude = ["private_field"]