开发者

Django - multi-level list

开发者 https://www.devze.com 2023-04-03 20:58 出处:网络
How is it possible to generate a multilevel list in django? I am trying to writing a simple code for displaying categ开发者_StackOverflow中文版ories with subcategories and same thing for forums with s

How is it possible to generate a multilevel list in django? I am trying to writing a simple code for displaying categ开发者_StackOverflow中文版ories with subcategories and same thing for forums with subforums.

It should look like this:

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

Here is my code:

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%}


You can use optgroups

In your django form you can set them up like so.

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)

I used this to sort activities into programs as sub groups. Works great.

0

精彩评论

暂无评论...
验证码 换一张
取 消