Django模型形式的初始值

时间:2018-11-12 17:55:28

标签: django

我很难理解有关该文档的Django文档。我也遇到了其他一些具有相同问题的话题,但是我似乎无法获得建议的答案来为我工作。我认为这是因为我正在发布文本,并且它不被视为“干净”数据吗?

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

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

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

views.py

class BuildStopView(LoginRequiredMixin,UpdateView):
    model = Build
    form_class = StopBuild
    template_name = 'build_stop.html'
    login_url = 'login'

forms.py

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']

(模板)stop_build.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 %}

1 个答案:

答案 0 :(得分:2)

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

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

但是,如果希望这些内容始终显示为隐藏,则可能应该在表单定义中使用HiddenInput widgets进行声明。