using django with bootstrap tab list

Hi All,

I am trying to use bootstraps tab list with django,
Basically i have grouped my fields under several fieldsets in the modelform.
in the html template i generate bs nav-pills and tab-control to show the fields.
it renders fine. below is the code.
However whenever the user leaves a required field empty in a tab
which is not active and clicks submit, django cannot put the focus on the required field.
the same form works fine without bs tabs.
So is there a way for me to be able to use django validation or do I need to
write my own js to loop through all required fields and set focus?

========= the model form ================
class PostSellTutorForm(forms.ModelForm):
class Meta:
model = SellTutor
exclude = default_exclude + [‘post’]

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)

    self.fieldsets = [
            ['Basics', {'comment': 'about the tutor', 'fields': ['english', 'languages', 'years_of_experience', 'primary_occupation', 'message']}],
            ['Cost', {'comment': 'tutor cost', 'fields': ['hourly_rate', 'free_trial', 'free_trial_hours']}],
        ]
    
def get_fieldsets(self):
    return self.fieldsets

============ the render function ===============
def render_post_form(request, template, form, title, post_id, post_type, partial_save):
context = {}
# context[‘fieldsets’] = form.Fieldsets.value
context[‘form’] = PostSellTutorForm
context[‘page_title’] = title
context[‘post_id’] = post_id
context[‘post_type’] = post_type
context[‘partial_save’] = partial_save
return render(request, template, context)

=========== the template =======================
{% load static %}

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" crossorigin="anonymous">


<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/css/bootstrap.min.css">
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.1/dist/jquery.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.2/dist/js/bootstrap.bundle.min.js"></script>

<title>Tutor</title>
{% load crispy_forms_tags %}

Toggleable Pills


{# Include the hidden fields #} {% for hidden in form.hidden_fields %} {{ hidden }} {% endfor %} {# Include the visible fields #} {{ form.non_field_errors }}
{{ form.title.errors }}
<!-- Nav pills -->
<ul class="nav nav-pills" role="tablist">
  {% for fieldset_name, fieldset in form.get_fieldsets %}      
  <li class="nav-item">
    <a class="nav-link" data-toggle="pill" href="#{{fieldset_name}}">{{fieldset_name}}</a>
  </li>
  {% endfor %}
</ul>

<!-- Tab panes -->
  <form method="post" class="tab-content">
    {% for fieldset_name, fieldset in form.get_fieldsets %}
    <div id="{{ fieldset_name }}" class="container tab-pane fade"><br>
      <h3>{{ fieldset_name }}</h3>
      {% csrf_token %}        
      <div class="form-group">
        {% for field in form %}
          {% if field.name in fieldset.fields %}
            <div class="form-group">

              {{ field |as_crispy_field}}
            </div>
          {% endif %}
        {% endfor %}
      </div>
    </div>
  {% endfor %}
  
  <button type="submit" class="btn btn-primary">Submit</button>
</form>