Django中的链式选择[模块:django-smart-selects]

时间:2018-08-03 10:40:26

标签: python django django-models django-smart-selects

我正在尝试使用django-smart-selects模块来创建相关的下拉列表。我遵循了文档并定义了模型,在其中使用了“ ChainedForeignKey”来定义公司与产品之间的链接。

models.py

class Company(models.Model):
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name


class Product(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)

    def __str__(self):
        return self.name

class Rates(models.Model):
    company = models.ForeignKey(Company, on_delete=models.CASCADE)
    product = ChainedForeignKey(
        Product,
        chained_field = "company",
        chained_model_field = "company",
        show_all = False,
        auto_choose = True,
        sort=True)
     taux_comm_1 = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(1)])
     taux_comm_2 = models.FloatField(validators=[MinValueValidator(0), MaxValueValidator(1)]) 

然后我定义了一个表单:

forms.py

class Rates(forms.ModelForm):
    class Meta:
        model = Rates
        fields= ['company', 'product', 'taux_comm_1', 'taux_comm_2']

从我的数据库中检索数据,我可以从第一个下拉列表中选择一家公司。但是,第二个列表(产品)已锁定。我已将产品与数据库中的公司相关联(使用外键)。

如果你们对我如何解决该问题有任何想法,那将非常好。我已经搜索了类似的问题,但是找不到类似的问题。

这是表单的屏幕截图。

Here is a screenshot of the form

1 个答案:

答案 0 :(得分:2)

我使用JS Lint brach(https://github.com/digi604/django-smart-selects/tree/js-unlinting-fixes)解决了该问题。

参考:https://github.com/digi604/django-smart-selects/issues/258

编辑:添加逐步说明以解决该问题:

步骤1::删除django-smart-selects的现有版本。在终端中输入pip uninstall django-smart-selects

步骤2:通过键入

来安装JS-lint分支
pip install git+https://github.com/digi604/django-smart-selects.git@js-unlinting-fixes` in the terminal

在终端中。

步骤3:'smart_selects',添加到INSTALLED_APPS的{​​{1}}列表中。

步骤4::在您应用的settings.py中添加from smart_selects.db_fields import ChainedForeignKey

第5步:将models.py网址添加到项目的smart_selects中。 urls.pyChained Selects选择需要它。例如:

Chained ManyToMany

第6步:您还需要在每个包含urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^chaining/', include('smart_selects.urls')), ) 字段的页面中都包括jQuery。在项目的smart_selects中添加USE_DJANGO_JQUERY = True

步骤7:在HTML文件中的settings.py前添加{{ form.media.js }},以便从Django模型派生的Django表单反映智能选择功能。

我正在使用Python 2.7.10和Django 1.11。

祝一切顺利!