Как получить данные с заданным порядком из базы данных? (django)

У меня есть модель, в которой есть различные поля данных, и поле "section-order" задано. теперь я хочу получить эти данные в аккордеоны bootstrap с учетом "section-order". например, section-order = 1 должен попасть в первый аккордеон и аналогично

**МОДЕЛИ **

class casestudy_list(models.Model):
    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)


    def __str__(self):
        return self.title

class CaseStudyContent(models.Model):
    id = models.AutoField(primary_key=True)
    case_study = models.ForeignKey(casestudy_list, on_delete=models.CASCADE)
    section_order = models.IntegerField()
    section_title = models.CharField(max_length=255)

    content_text = models.TextField(blank=True)
    content_img = models.ImageField(upload_to='casestudy/images', default="")



   def __str__(self):
       return self.section_title

ПРОСМОТРОВ

def home(request):
    casestudy_obj = casestudy_list.objects.all().values()
    template = loader.get_template('home.html')
    context = {
    'casestudy_obj' : casestudy_obj, #making the object for accessing purposes
    }
    return HttpResponse(template.render(context, request))

def casestudy(request, id):
    casestudy_obj = casestudy_list.objects.get(id=id)
    template = loader.get_template('casestudy.html')
    context = {
    'casestudy_obj' : casestudy_obj, #making the object for accessing purposes
   
    }
    return HttpResponse(template.render(context, request))

на главной странице, когда пользователь нажимает на любую ссылку, она возвращает его на страницу кейс-стади.

Используйте функцию render, чтобы сделать код более лаконичным. Отсортируйте набор запросов в соответствии с section_order с помощью метода order_by().

from django.shortcuts import render, get_object_or_404

def casestudy(request, id):
    # results in 404 error when no object is found with given id
    casestudy_obj = get_object_or_404(casestudy_list, id=id)
    casestudy_content = CaseStudyContent.objects.filter(case_study=casestudy_obj).order_by('section_order')
    context = {
        'casestudy_obj': casestudy_obj,
        'casestudy_content': casestudy_content,
    }
    return render(request, 'casestudy.html', context)

Затем, передав эти две переменные в шаблон casestudy.html, вы можете вставить их через фигурные скобки.

<div class="accordion" id="accordionExample">
  {% for content in casestudy_content %}
    <div class="card">
        <div class="card-header" id="heading{{ content.id }}">
            <h2 class="mb-0">
                <button class="btn btn-link" type="button" data-toggle="collapse" data-target="#collapse{{ content.id }}" aria-expanded="true" aria-controls="collapse{{ content.id }}">
                    {{ content.section_title }}
                </button>
            </h2>
        </div>
        <div id="collapse{{ content.id }}" class="collapse {% if forloop.first %}show{% endif %}" aria-labelledby="heading{{ content.id }}" data-parent="#accordionExample">
            <div class="card-body">
                <p>{{ content.content_text }}</p>
                {% if content.content_img %}
                <img src="{{ content.content_img.url }}" class="img-fluid" alt="{{ content.section_title }}">
                {% endif %}
            </div>
        </div>
    </div>
  {% endfor %}
</div>

Вы не показали свой шаблон. Надеюсь, приведенный выше пример для аккордеона поможет.

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