python - 如何在不显示 Django 表单中的字段的情况下设置表单字段默认值?

标签 python django

我正在使用 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/

相关文章:

python - IPython 笔记本 : How to combine HTML output and matplotlib figures?

python - 如何保护用于在 Django Rest Framework 中注册和登录的 API?

python - psycopg2 fetchmany 与命名游标

python - 如何使 django-storage 和 django-pipeline 协同工作

Django:存储所有应用程序通用功能的位置

python - 在 nginx 上为 django 项目设置 ssl

python - 在python中转换为安全的unicode

python - 查找每行中的前 N ​​个非空值

Django:list_filter 和外键字段

python - Pandas 和 Matplotlib 将 df 绘制为具有 2 个 y 轴的子图