2014-09-23 2 views
0

Я искал решение того, что, по моему мнению, было бы общим запросом, но очень мало нашел в Google. Я пытаюсь создать «каскадный» набор выпадающих меню, обычный вид пользовательского интерфейса, обычно найденный в формах местоположения, где пользователь будет выбирать страну, город, город и т. Д.Django Smart Select

Решение, с которым я пытаюсь работать с есть https://github.com/digi604/django-smart-selects. Однако документация, что мало от этого, довольно запутанна. Вот модели, как я их до сих пор:

models.py

class InstrumentModelType(models.Model): 
    model_type = models.CharField(max_length=100) 

    def __unicode__(self): # Python 3: def __str__(self): 
     return unicode(self.model_type) 

class InstrumentManufactuer(models.Model): 
    manufacturer_model_type = models.ForeignKey(InstrumentModelType) 
    manufacturer = models.CharField(max_length=100) 

    def __unicode__(self): # Python 3: def __str__(self): 
     return unicode(self.manufacturer) 

class InstrumentEquipmentType(models.Model): 
    equipment_manufacturer = models.ForeignKey(InstrumentManufactuer) 
    equipment_type = models.CharField(max_length=100) 

    def __unicode__(self): # Python 3: def __str__(self): 
     return unicode(self.equipment_type) 


class InstrumentDetails(models.Model): 
    instrument_model_type = models.ForeignKey(InstrumentModelType) 
    instrument_manufacturer = ChainedForeignKey(InstrumentManufactuer, 
          chained_field='instrument_model_type', 
          chained_model_field='manufacturer_model_type', 
          auto_choose = True, 
          show_all = False) 
    instrument_equipment_type = ChainedForeignKey(InstrumentEquipmentType, 
          chained_field='instrument_manufacturer', 
          chained_model_field='equipment_manufacturer', 
          auto_choose = True, 
          show_all = False) 

    def __unicode__(self): # Python 3: def __str__(self): 
     return '%s %s %s' % (self.instrument_model_type, self.instrument_manufacturer, self.instrument_equipment_type) 

Когда я выбираю опцию из первого раскрывающегося списка (instrument_model_type) ни один из двух других выпадающие заселить, как и ожидалось , В идеале я хочу иметь возможность сначала фильтровать по типу модели, а затем производителю, чтобы показать доступные типы оборудования. Может ли кто-нибудь увидеть, где я ошибаюсь?

Я включил ссылку в urls.py, как описано в документах, и попробовал множество комбинаций ссылок на поле (chained_field/chained_model_field), чтобы я правильно понял отношения. Я также заметил, что simplejson, упомянутый в widgets.py, был обесценен, поэтому я заменил его json.

При тралении сообщений здесь я нашел http://www.dajaxproject.com/forms/, но автор на странице Github рекомендует не использовать библиотеку.

Я ошибаюсь, думая, что это общий запрос? Есть ли решение Django, испеченное в том, что я пропустил? Если это имеет значение, я использую Django 1.6.

Заранее спасибо.

ответ

0

Попробуйте Django Clever Выбирается

https://github.com/PragmaticMates/django-clever-selects

Я использую его в моем проекте Django 1.6. Целесообразнее использовать цепочки в представлениях и формах (в умных вариантах), а не в моделях (например, умные выборки).

+0

Спасибо плохо дать идти сегодня – Karl

+0

Привет, Успели ручка для обуви Clever - выбирает мой проект. Все это работает, за исключением случаев, когда я отправляю форму, которую я получаю: данные возвращаются из запроса ajax (url =/tagnumbers/ajax/cained-brand-models /, params = {'field_value': u'1 ',' parent_value ': u '1', 'field_name': 'manufacturer'}) не удалось десериализовать на объект Python Любые идеи? Он пытался понять это, но пока не повезло. Еще раз спасибо – Karl

+0

У меня было что-то похожее, и посмотрите https://github.com/PragmaticMates/django-clever-selects/issues/6 hack. Просто сейчас умный - выберите работу, но я не удовлетворен и с нетерпением жду. –

1

Я только что закончил подобный проект, и я думаю, ваше решение:

class InstrumentEquipmentType(models.Model): 
     manufacturer_model_type = models.ForeignKey(InstrumentModelType) 
     instrument_manufacturer = ChainedForeignKey(InstrumentManufactuer, 
           chained_field='instrument_model_type', 
           chained_model_field='manufacturer_model_type', 
           auto_choose = True, 
           show_all = False) 
     equipment_type = models.CharField(max_length=100) 

     def __unicode__(self): # Python 3: def __str__(self): 
      return unicode(self.equipment_type) 

Позвольте мне знать, если он не работает, чтобы отправить вам мой пример