Как получить данные с заданным порядком из базы данных? (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>
Вы не показали свой шаблон. Надеюсь, приведенный выше пример для аккордеона поможет.