Вообщем будет вот типа такой поиск:

http://documentcloud.github.io/visualsearch/

Где ключи это деревовидная иерархия, которая грузиться аяксом в зависимости от выбора, а значения вводвояться пользователем(для каждой категории свои значения), ну и в качестве подсказки потом идёт автокомплит по ним.

я сделал как то слишком просто модели мне кажется... и будет много запросов.

class Category(MPTTModel):
    title = models.CharField(max_length=255, verbose_name=u'Название')
    parent = TreeForeignKey('self', verbose_name=u'Родитель', null=True, blank=True, related_name='children')

    class MPTTMeta:
        level_attr = 'mptt_level'

    class Meta:
        verbose_name = u'Категория'
        verbose_name_plural = u'Категории'

class CategoryKeywords(models.Model):
    name = models.CharField(max_length=255, verbose_name=u'Значение')
    category = models.ForeignKey('Category', verbose_name=u'Категория', related_name='cat_keyword')

    class Meta:
        verbose_name = u'Поисковое'
        verbose_name_plural = u'Поисковые значения'

    def __unicode__(self):
        return self.name

Как думаете, может тут лучше использовать контент тупес вместо мтм? Или как организовать всё это что бы можно удобно было доставать иерархию и ключевые слова к ним, не используя 100 запросов к базе...