我正在使用 forms.ModelForm
来设置模型的属性。对于其中一个属性,我想设置一个默认值,我想在表单中处理它,因此模型类中的模型属性没有 default=value
。
但是,在表单上,我不想向用户显示值,甚至是隐藏值,因此,我不能将字段放在 fields=(...)
因此,我无法使用 field.initial=value
设置默认值的方式。
我可以覆盖验证或保存方法并在其中压缩属性设置,但这不是我愿意做的。
是否有解决此问题的任何“适当”或更优雅的方法?
最佳答案
首先,从模型表单中排除私有(private)字段。
class MyModelForm(forms.ModelForm):
class Meta:
model = MyModel
exclude = ["private_field"]
通常,如果我想使用与模型定义不同的默认值,我会在 View 中设置它。
if form.is_valid():
my_model = form.save(commit=False)
my_model.private_field = "default value"
my_model.save()
如果您不想在 View 中设置值,我建议覆盖 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"]
关于python - 如何在不显示 Django 表单中的字段的情况下设置表单字段默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815949/