Тема: Запара з отриманням мульті дропдавну з допомогою Django.
Коротше є модель , і потрібно зробити трирівневий дропдавн. Двох рівневий підказали , але так і не в’їхав як він працює, а саме цикли виведення.
Ось двох рівневий. Який працює справно. Але коли намагаюсь вдосконалити і зроби трьох рівневий ,мало що вихоить. Те що получилось в самому кінці з скріншотами.
def some_view(request):
foo = []
for name_part in NamePart.objects.all():
foo.append({
'name_part': name_part,
'rozdils': Rozdil.objects.filter(part_of=name_part.pk)
})
return render(request, 'template_show_all.html', {'foo': foo})
# template_show_all.html
{% for buzz in foo %}
<h1>{{ buzz. name_part.title}}
{% for bar in buzz.rozdils %}
<h2>{{ bar.title }}
{% endfor %}
{% endfor %}
Модель.
class NamePart(models.Model):
title = models.CharField(max_length=255,verbose_name=" .")
def __unicode__(self):
return '%s' % (self.title)
class Rozdil(models.Model):
title = models.CharField(max_length=255,verbose_name="Налу")
part_of = models.ForeignKey(NamePart,verbose_name="н")
is_main = models.BooleanField(default=1,verbose_name="Гоний ?")
def get_absolute_url(self):
return reverse('rozdil', self.id)
def __unicode__(self):
return '%s' % (self.title)
class Stats(models.Model):
name = models.CharField(max_length=170,verbose_name="я ?")
image = models.ImageField(upload_to='media')
robota = RichTextField(verbose_name="Опти")
opus_ustanovku = RichTextField(verbose_name="Опановки")
zag_bund = RichTextField(verbose_name="Забудова")
tth = RichTextField(verbose_name="ТТХ")
teh_obslug = RichTextField(verbose_name="Технне ")
main_is = models.ForeignKey(Rozdil,verbose_name="З ")
def get_absolute_url(self):
return reverse('details', self.id)
def __unicode__(self):
return '%s %s' % (self.name, self.main_is)
Те що получилось у мене.
HTML розмітка.
{% for buzz in lal %}
<div class="dropdown">
<a id="dLabel" role="button" data-toggle="dropdown" class="btn btn-default" data-target="#" href="">
{{ buzz.name_part.title}} <span class="caret"></span>
</a>
<ul class="dropdown-menu multi-level" role="menu" aria-labelledby="dropdownMenu">
<li class="dropdown-submenu">
{% for bar in buzz.rozdils %}
<a tabindex="-1" href="#">{{ bar.title }}</a>
<ul class="dropdown-menu">
{%for det in buzz.details%}
<li><a href="#">{{det.name}}</a></li>
{% endfor%}
</ul>
{% endfor%}
</li>
</ul>
</div>
{% endfor%}
Вьюха
def detali(request,id_ekz):
foo = []
for name_part in NamePart.objects.all():
foo.append({'name_part': name_part,'rozdils': Rozdil.objects.filter(part_of=name_part.pk)})
Lal = []
for name_part in NamePart.objects.all():
for details in Rozdil.objects.filter(part_of=name_part.pk):
Lal.append({'name_part': name_part,'rozdils': Rozdil.objects.filter(part_of=name_part.pk),'details':Stats.objects.filter(main_is=details.pk)})
details = Stats.objects.get(pk=id_ekz)
rozdil = Rozdil.objects.all()
context = {'details':details,'rozdil': rozdil,'foo': foo,'lal':Lal}
return render(request,'details.html',context)
Тому замість того щоб створити одину кнопку як назву частини, що в середині містить 7 розділів (в випакду тзсп), а від кожного розділу має вибігати стрічка з усім що є в цьому розділі.
То я отримую ось таке 7 назв ТЗСП в котрому по 7 розділів але одна кнопка вибиває дропдавн , в якому все ті ж 7 пунктів але відображають список для перешого розділу, друга по списку кнопка відображає до друго і т.д
ДУмаю по скріншотах швидше зрозумієте.
Ну і скріншоти.