Моя форма не сохраняется с помощью начальной загрузки для стилизации в django

#django #forms #styling #django-bootstrap4

Вопрос:

здравствуйте, спасибо за ваш визит, я новичок в Django, я хотел бы знать, как стилизовать форму с помощью django-bootstrap-v5, я пробую это и не работает

у меня есть это form.py

 pathesForm = inlineformset_factory(
    Book,
     quotation,
      fields=('name','time',),
      can_delete=False,extra=4,max_num=4,
      widgets={'name': forms.TextInput(attrs={
            'placeholder': 'name of book',
        })
    }
    
      )
 

я использую django-bootstrap-v5 и в файле html

эта форма со мной не работает

 <form role="form" class="form-horizontal" method="post">
        {% csrf_token %}
      {{ formset.management_form }}
        {% for form in formset %}
          <div class="row">
        <div class="col-md-6">
          {%  bootstrap_field form.name %}
        </div>
        <div class="col-md-6">
          {%  bootstrap_field form.time %}
        </div>
      </div>
      {%  if form.maybemissing %}
        {%  bootstrap_field form.maybemissing %}
      {%  endif %}
{% endfor %}

        <button type="submit">Save</button>
    </form>
 

но это работает со мной (я могу сохранить форму)

 {% bootstrap_formset_errors formset %}
    <form role="form" class="form-horizontal" method="post">
        {% csrf_token %}
    
          {%  bootstrap_formset formset %}
      
        <button type="submit">Save</button>
    </form>
 

это мое view.py

 def hello(request,id):
    book=Book.objects.get(id=id)
        if request.method == 'POST':
            form= pathesForm(request.POST,request.FILES,instance=book)
            if form.is_valid():

                form.save()
        
            
        form = pathesForm(instance=book )
        

        return render(request,'hello/pathesForm.html',{'formset':form})
 

я использую print («привет»), чтобы попытаться понять, в чем проблема, и в результате кажется, что форма недействительна
, как я могу настроить стиль своей формы, как в первой

Ответ №1:

в своих представлениях вы забыли передать тогда другое утверждение, так что вот оно

 def hello(request,id):
    book=Book.objects.get(id=id)
    if request.method == 'POST':
        form= pathesForm(request.POST,request.FILES,instance=book)
        if form.is_valid():
            form.save()    
    else:   
        form = pathesForm(instance=book)
        return render(request,'hello/pathesForm.html',{'formset':form}) 
 

и в вашем html-файле при запросе поля файла
вы должны указать тип шифрования, вот он

 <form role="form" class="form-horizontal" method="POST" enctype="multipart/form-data">
 

это должно решить вашу проблему и сказать мне, если вы все еще получаете какие-либо ошибки, хорошего дня

Комментарии:

1. проблема не в том, как стилизовать форму с помощью начальной загрузки

2. проблема, почему форма не сохраняется

3. тогда, пожалуйста, будьте более точны, задавая вопрос, и всегда используйте правильное название, обновляя мой anwser

4. оператор else ничего не делает, и тип enctype не работает

5. в любом случае, у меня есть проблема, я опубликую правильный ответ

Ответ №2:

в любом случае, если у вас возникли проблемы с от использования печати(форма.ошибки) до того, как форма будет действительна, и после этого у меня возникла проблема, и я получил эту ошибку [{‘id’: [‘Это поле обязательно.’]} soulition:

     <form role="form" method="post">
        {% csrf_token %}
      {{ formset.management_form }}
        {% for form in formset %}
          {% for hidden in form.hidden_fields %}
        {{ hidden }}
    {% endfor %}
          <div class="row">
        <div class="col-md-6">
          {%  bootstrap_field form.name %}
        </div>
      </div>
      {%  if form.maybemissing %}
        {%  bootstrap_field form.maybemissing %}
      {%  endif %}
{% endfor %}
 

я думаю, что он успешно использует набор форм только из-за ( автоматическое добавление идентификатора )
и если вы хотите, чтобы forloop, вы должны добавить его вручную