Django模型形式的初始值

Django模型形式的初始值,django,Django,我很难理解Django的文档。我也遇到过其他一些同样问题的线索,但我似乎无法找到适合我的建议答案。我想这是因为我在发布文本,而它不被认为是“干净”的数据 我想自动填充两个表单字段,然后当用户点击提交按钮时,它会保存。但由于某些原因,只有布尔值起作用,而不是文本值。有什么想法吗 您还将看到这些字段对我的模板是隐藏的。当我显示这些字段时,初始值会像我预期的那样正确设置,但当我点击submit时,只有布尔值会正确保存到数据库中 编辑 当我不使用模板中的{{form}}隐藏表单字段时,它工作得很好。 当

我很难理解Django的文档。我也遇到过其他一些同样问题的线索,但我似乎无法找到适合我的建议答案。我想这是因为我在发布文本,而它不被认为是“干净”的数据

我想自动填充两个表单字段,然后当用户点击提交按钮时,它会保存。但由于某些原因,只有布尔值起作用,而不是文本值。有什么想法吗

您还将看到这些字段对我的模板是隐藏的。当我显示这些字段时,初始值会像我预期的那样正确设置,但当我点击submit时,只有布尔值会正确保存到数据库中

编辑 当我不使用模板中的
{{form}}
隐藏表单字段时,它工作得很好。
当我使用
{{form.field.as_hidden}
接受布尔字段,但不接受文本字段。 我正在尝试用文本值自动填充此字段,隐藏它,并在按下提交按钮时提交此值

视图.py

class BuildStopView(LoginRequiredMixin,UpdateView):
    model = Build
    form_class = StopBuild
    template_name = 'build_stop.html'
    login_url = 'login'
class StopBuild(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StopBuild, self).__init__(*args, **kwargs)
        self.initial['buildEndType'] = 'manuallyStopped'
        self.initial['buildActive'] = False
    class Meta:
        model = Build
        fields =  ['buildEndType','buildActive']
forms.py

class BuildStopView(LoginRequiredMixin,UpdateView):
    model = Build
    form_class = StopBuild
    template_name = 'build_stop.html'
    login_url = 'login'
class StopBuild(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(StopBuild, self).__init__(*args, **kwargs)
        self.initial['buildEndType'] = 'manuallyStopped'
        self.initial['buildActive'] = False
    class Meta:
        model = Build
        fields =  ['buildEndType','buildActive']
(模板)停止构建.html

{% extends 'base.html' %}

{% block body %}

<style>
  div.a {
      text-align: center;
  }
</style>

<div class = "a">
  <h3>Are you sure you want to stop this build manually?</h3>

</div>

<form action="" method="post">{% csrf_token %}
  {{ form.field.as_hidden }}
  <button class="btn btn-danger ml-2" type="submit">Stop Build Manually</button>
</form>

{% endblock %}
{%extends'base.html%}
{%block body%}
a组{
文本对齐:居中;
}
是否确实要手动停止此生成?
{%csrf_令牌%}
{{form.field.as_hidden}
手动停止生成
{%endblock%}

表单。字段。as_hidden
不会将字段输出为hidden,事实上它根本不做任何事情,因为表单中没有名为
字段
的字段。您需要参考实际字段:

{{ form.buildEndType.as_hidden }}
{{ form.buildActive.as_hidden }}

但是,如果您希望这些字段始终显示为隐藏的,您可能应该在表单定义中使用声明它们。

表单。字段。因为隐藏的
不会将字段输出为隐藏的,事实上它根本不做任何事情,因为您的表单中没有名为
字段
的字段。您需要参考实际字段:

{{ form.buildEndType.as_hidden }}
{{ form.buildActive.as_hidden }}

但是,如果您希望始终将它们显示为隐藏的,您可能应该在表单定义中这样做,用声明它们。

您希望
{{form.field.as_hidden}
做什么?您是否尝试过在该位置使用模板标记
{{form}
来简单地呈现表单?
{{form.field.as_hidden}
隐藏表单字段。我只希望用户看到按钮,而不是正在提交的内容。这基本上是一个确认页面。当我放置
{{form}}
时,它显示字段。Ok。问题是没有属性
form.field
,正如Daniel Roseman在下面的回答中所解释的那样。有一件事我不太明白,如果你想隐藏每个字段,为什么在这里使用表单?或者只是在示例代码中?如果它只是一个按钮,您不需要表单。你可以有一个空负载的帖子。您只是将数据传递给客户机,希望客户机在不修改的情况下直接传递回数据。我认为一定有更好的方法,但不确定最好的方法是什么。我给用户显示了一个按钮,上面写着“停止构建”,要用我的代码停止一个“构建”,它需要设置为False,所以我想我可以隐藏这个实际字段,这样看起来更干净。。一篇帖子听起来更正确,也不太老套。你希望
{{form.field.as_hidden}
做什么?您是否尝试过在该位置使用模板标记
{{form}
来简单地呈现表单?
{{form.field.as_hidden}
隐藏表单字段。我只希望用户看到按钮,而不是正在提交的内容。这基本上是一个确认页面。当我放置
{{form}}
时,它显示字段。Ok。问题是没有属性
form.field
,正如Daniel Roseman在下面的回答中所解释的那样。有一件事我不太明白,如果你想隐藏每个字段,为什么在这里使用表单?或者只是在示例代码中?如果它只是一个按钮,您不需要表单。你可以有一个空负载的帖子。您只是将数据传递给客户机,希望客户机在不修改的情况下直接传递回数据。我认为一定有更好的方法,但不确定最好的方法是什么。我给用户显示了一个按钮,上面写着“停止构建”,要用我的代码停止一个“构建”,它需要设置为False,所以我想我可以隐藏这个实际字段,这样看起来更干净。。一篇帖子听起来更正确,也不那么刻薄。