Как стилизовать форму с помощью django-bootstrap-v5

Здравствуйте, спасибо за ваш визит Я новичок в Django Я хотел бы знать, как стилизовать форму Я пробовал это и не работает У меня есть это

это form.py

pathesForm = inlineformset_factory(
    Book,
     VoyagePlace,
      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('hello), чтобы попытаться узнать, в чем проблема, и результат кажется, что форма не действительна, как я могу настроить стиль моей формы, как в первом случае

В ваших представлениях вы забыли передать оператор else, так что вот он

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">

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

всегда, если у вас есть проблема с from используйте print(form.errors) до того как форма будет действительна и после нее У меня возникла проблема и я получил эту ошибку [{'id': ['This field is required.']} 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 %}

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

Вернуться на верх