我一直在寻找一个解决方案,我认为这是一个常见的请求,但在谷歌搜索时发现很少。我正在尝试创建一个级联的'一组下拉菜单,通常在位置表单中找到的常规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。
提前致谢。
答案 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项目中使用它。在视图和表单中操作链(在聪明的选择中)更有用,而不是在模型中(比如智能选择)。