Bootstrap表单不显示实例的数据

时间:2018-08-28 19:43:16

标签: python django django-forms bootstrap-4

我正在尝试检索实例的当前数据以引导表单以进行更新。当我使用{{user_form.as_p}}时,所有当前数据都会自动填充,但是用引导程序形式替换它似乎是空的。这是我的python和html文件:

views.py

def update_profile(request):

   if request.method == 'POST':
        user_form = RegisterForm(request.POST, instance=request.user)
        if user_form.is_valid():
            user_form.save()
            return redirect('profile')

    else:
        user_form = RegisterForm(instance=request.user)

    return render(request, 'blog/update_profile.html', {
        'user_form': user_form,
    })

update_profile.html

<form method="post">
    {% csrf_token %}
    <div class="form-group">
      <label for="formGroupExampleInput">Name</label>
      <div id="formGroupExampleInput">
        <input class="form-control" name="first_name"  maxlength="150" autofocus required="" id="id_first_name" type="text" placeholder="First name" >
      </div>
    ...      
    <div class="form-group">
     <button type="submit" class="btn btn-success" id="formGroupExampleInput5">Save changes</button>
   </div>
</form>

forms.py

class RegisterForm(UserCreationForm):
   email = forms.EmailField(max_length=200, help_text='Required')

   class Meta:
        model = User
        fields = ('first_name', 'last_name', 'username', 'email', 'password1', 'password2')

2 个答案:

答案 0 :(得分:2)

我绝对认为这是每个人都可以从中受益的。我想您可能希望继续在整个表单中使用引导表单/设计,因此最好的方法是创建另一个文件,您可以从中使用它-每次都可以重复使用。 这是我从docs获得的示例。

{% load widget_tweaks %}

{% for hidden_field in form.hidden_fields %}
  {{ hidden_field }}
{% endfor %}

{% if form.non_field_errors %}
  <div class="alert alert-danger" role="alert">
     {% for error in form.non_field_errors %}
      {{ error }}
    {% endfor %}
  </div>
{% endif %}

{% for field in form.visible_fields %}
  <div class="form-group">
    {{ field.label_tag }}

    {% if form.is_bound %}
      {% if field.errors %}
        {% render_field field class="form-control is-invalid" %}
        {% for error in field.errors %}
          <div class="invalid-feedback">
            {{ error }}
          </div>
        {% endfor %}
      {% else %}
        {% render_field field class="form-control is-valid" %}
      {% endif %}
    {% else %}
      {% render_field field class="form-control" %}
    {% endif %}

    {% if field.help_text %}
      <small class="form-text text-muted">{{ field.help_text }}</small>
    {% endif %}
  </div>
{% endfor %}

然后将其按如下方式通过模板传递(上面的代码位于名为bs4_form.html的文件中):

<form method="post" novalidate>
  {% csrf_token %}
  {% include 'includes/bs4_form.html' with form=form %}
  <button type="submit" class="btn btn-primary">Submit</button>
</form>

我个人在呈现错误时遇到问题,但是可以通过执行{{ error.as_p }}而不是{{ error }}来快速解决。对于任何其他呈现为代码并注意其正确形式的内容,也是如此。 希望这会有所帮助!

答案 1 :(得分:0)

对于将我的代码作为问题基础的人们,这是解决方案:

{% load widget_tweaks %}

  <form method="post" enctype= "multipart/form-data">
    {% csrf_token %}


    {% for hidden_field in user_form.hidden_fields %}
      {{ hidden_field }}
    {% endfor %}

    {% for field in user_form.visible_fields %}
      <div class="form-group">
        {{ field.label_tag }}
        {% render_field field class="form-control" %}
        {% if field.help_text %}
          <small class="form-text text-muted">{{ field.help_text }}</small>
        {% endif %}
      </div>
    {% endfor %}

      <button type="submit" class="btn btn-success" id="formGroupExampleInput5">Save changes</button>

    </div>
  </form>