我的表单不使用 bootstrap 在 django 中保存样式

My form does not save using bootstrap for styling in django

您好,感谢您的光临 我是 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('hello) 尝试知道问题出在哪里,结果似乎是表格无效 我怎样才能像第一个一样自定义我的表单样式

在您看来,您忘记传递 then 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">

这必须解决你的问题,如果你仍然遇到任何错误,请告诉我祝你今天愉快

如果您在表单有效之前和之后使用 print(form.errors) 遇到问题 我遇到了问题,并收到此错误 [{'id': ['This field is required.']} 灵魂:

    <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 你应该手动添加它