首页 > 解决方案 > 如何在 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>

标签: pythondjangodjango-modelsdjango-formsdjango-views

解决方案


您必须手动呈现每个字段以获取预填充的字段。例如:

{% for field in form %}
     {% if field.languages %}
          <input type="name" id={{ field.languages.id_for_label }} value={{ field.languages.value }}/>
     {% endif %}
{% endfor %}

有关更多详细信息,请参阅文档


推荐阅读