j.koch
unread,Sep 3, 2010, 8:05:39 AM9/3/10Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Django users
First a short description of the issue:
I'm trying to create a module-system similar to the one in Joomla!,
where modules (small information-widgets) can be shown in different
positions on different pages of the website.
I'm using the django-treemenus app for the menu-structure of the
website, this is comprised of two models: Menus and MenuItems.
When the user creates a module in the Django-admin he should be able
to pick the pages it's shown on from a SelectMultiple-list. For this,
I've created a Many-to-Many field that links Modules with MenuItems.
So far so good.
The MenuItems are shown ordered by ID, as is to be expected. However,
I would like to show them ordered by Menu, and also indented according
to their level in the tree-structure. The MenuItems-model contains
methods to generate such a structure, I just don't know what the best
way to populate the SelectMultiple-field with it is. After some
googling and searching in this group, I think I've found two possible
solutions:
1. Create a custom-widget based on SelectMultiple and replace
self.choices with my own tuples. The problem I see with this is that
it will query the database unnecessarily, once to populate the field
in the default way and then when I run my own queries. Is there a way
to avoid this? Where are the choices generated?
2. Instead of a Many-to-Many field, maybe use some other field
(CommaSeparatedInteger?) and make a ModelForm that shows a
MultipleSelect-Widget that I populate dynamically. The problem here is
that I'd rather prefer not to lose the relationship between Modules
and MenuItems that the M-to-M field creates.
Sorry for this lengthy first post. Anybody have any idea what the best
solution is? Is there something I haven't considered?
Thanks in advance