我正在尝试检索实例的当前数据以引导表单以进行更新。当我使用{{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')
答案 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>