Django Smart Select

时间:2014-09-23 15:25:06

标签: python django

我一直在寻找一个解决方案,我认为这是一个常见的请求,但在谷歌搜索时发现很少。我正在尝试创建一个级联的'一组下拉菜单,通常在位置表单中找到的常规UI功能,用户可以选择国家,城市,城镇等。

我一直在努力解决的问题是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。

提前致谢。

2 个答案:

答案 0 :(得分: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)

如果向我发送示例

,请告诉我

答案 1 :(得分:0)

尝试Django Clever选择

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

我在我的Django 1.6项目中使用它。在视图和表单中操作链(在聪明的选择中)更有用,而不是在模型中(比如智能选择)。