Джанго - многоуровневый список - PullRequest
0 голосов
/ 11 сентября 2011

Как можно создать многоуровневый список в django? Я пытаюсь написать простой код для отображения категорий с подкатегориями и то же самое для форумов с подфорумами.

Это должно выглядеть так:

Category-1
 - Subcategory-1
 - Subcategory-2
 - Subcategory-3

Вот мой код:

CATEGORY_CHOICES = (
                    ('hw', "Hardware"),
                    ('soft', "Software"),
                    ('snd', 'Audio'),
                    )
category = models.CharField(max_length=32, choices=CATEGORY_CHOICES)
subcategory = models.CharField(unique=True, max_length=32, blank=True)

{%for c in category %}

   {{ c.get_category_display|title }}
   {{ c.subcategory }}
   <br>
{%endfor%}

1 Ответ

0 голосов
/ 11 сентября 2011

Вы можете использовать optgroups

В форме django вы можете настроить их следующим образом.

def categories_as_optgroups(categories, subcategories):
   """
   Create optgroups for sorting activities into programs
   """
   subcategory = []
   for category in categories:
       subcategories_list = []
       for subcategory in subcategories.objects.filter(category_fk=category).order_by('name'):
          subcategories_list.append([subcategory.id, subcategory.name])

       categories_list = [category.name, subcategories_list]
       subcategory.append(categories_list)

   return activities

class ActivityForm(ModelForm):
    program = forms.ModelChoiceField(queryset=Program.objects.all().order_by('name'))
    class Meta:
       model = BookingActivity
    def __init__(self, *args, **kwargs):
       super(ActivityForm, self).__init__(*args, **kwargs)
       self.fields['activity'].choices = categories_as_optgroups(Programs, Activities)

Я использовал это для сортировки activities в programs как подгруппы. Прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...