Как получить предварительно заполненную форму при обновлении формы в django - PullRequest
0 голосов
/ 25 февраля 2020

Это мои формы.

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>

1 Ответ

0 голосов
/ 25 февраля 2020

Вам нужно будет визуализировать каждое поле вручную, чтобы получить предварительно заполненное поле. например:

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

для получения более подробной информации см. документы

...