python - 如何在 django 中更新表单时获取预填充的表单
问题描述
这是我的表格。
class CreateBooksForm(forms.ModelForm):
languages = forms.CharField(widget=forms.TextInput)
file = forms.FileField(widget=forms.FileInput(attrs={'accept':'application/pdf'}))
class Meta:
model = Book
fields = "name","languages", "about","image","file"
这是我的观点。所以当我渲染到我的更新视图模板时,我得到了语言和文件的空表单,但其他的被填充了。
@login_required
def post_update(request,pk):
update = get_object_or_404(Book,pk=pk)
form = CreateBooksForm(request.POST or None ,request.FILES or None,instance=update)
if request.method == 'POST':
if form.is_valid():
post = form.save(commit=False)
languages = form.cleaned_data['languages']
post.save() # must be save before adding m2m
tag_list=[Language.objects.get_or_create(name=tag)[0] for tag in post.languages.lower().split()]
for tag in tag_list:
a = post.language.add(tag)
post.language.set = a
post.save()
messages.success(request,'Updated successfully!')
update_book.delay(post.pk)
context ={
'form':form
}
return render(request,'books/update.html',context)
我的模板。所以这是我用过的简单的 django 脆皮模板。
<form method="POST" enctype="multipart/form-data">
<input type="hidden" name="csrfmiddlewaretoken" value="{{ csrf_token }}">
<img class="rounded-circle" src="/media/{{form.image.value}}" height="100px" width="150px">
{{ form|crispy }}
<button type="submit" class="btn btn-dark">Update Books</button>
</form>
解决方案
您必须手动呈现每个字段以获取预填充的字段。例如:
{% for field in form %}
{% if field.languages %}
<input type="name" id={{ field.languages.id_for_label }} value={{ field.languages.value }}/>
{% endif %}
{% endfor %}
有关更多详细信息,请参阅文档
推荐阅读
- ruby - 如何在 ruby 2.4 上从没有 rails 的 ajax 将 pdf 文件上传到服务器
- ios - 使垂直 UIStackView 在展开时忽略其子项的高度
- vim - 聚焦右括号时是否有扩展或函数知道括号声明
- javascript - 试图在 React / Ionic-React 中强制功能组件卸载
- laravel - Laravel 5.2 Maatwebsite Excel::load 不解析日文字符
- javascript - D3.js 工具提示文本停留在第一次观察 csv 时
- c++ - 如何在 IF 语句参数中比较字符串
- python - 给定 4 个值 q,w,e 和问题,如何解决给定问题
- scenekit - ARSCNPlaneGeometry 更新并重新计算纹理坐标,而不是拉伸它们
- python - Panda Dataframe 比较成对的行,如果它们通过,则将它们移动到新的数据框