Django 中的链式选择 [模块:django-smart-selects]
Chained Selects in Django [Module: django-smart-selects]
我正在尝试使用 django-smart-selects 模块来创建相关的下拉列表。我遵循了文档并定义了我使用 'ChainedForeignKey' 的模型,以便在我的公司和我的产品之间定义 link。
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']
数据是从我的数据库中检索的,我可以从第一个下拉列表中 select 一家公司。但是,第二个列表 (Product) 是锁定的。我已将产品关联到我数据库中的公司(使用外键)。
如果你们对我如何解决这个问题有任何想法,那就太好了。我搜索过类似的问题,但找不到类似的问题。
这是表格的屏幕截图。
我使用了 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`
第 3 步: 将 'smart_selects',
添加到 settings.py
中的 INSTALLED_APPS
列表。
第 4 步:在您的应用的 models.py
中添加 from smart_selects.db_fields import ChainedForeignKey
。
第 5 步: 将 smart_selects
网址添加到项目的 urls.py
中。 Chained Selects
和 Chained ManyToMany
选择需要这样做。例如:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^chaining/', include('smart_selects.urls')),
)
第 6 步:您还需要在包含来自 smart_selects
的字段的每个页面中包含 jQuery。在项目的 settings.py
中添加 USE_DJANGO_JQUERY = True
。
第 7 步: 在 HTML 文件中的 {{ form.as_table }}
之前添加 {{ form.media.js }}
,以便从 Django 模型派生的 Django 表单反映智能选择功能。
我正在使用 Python 2.7.10 和 Django 1.11。
祝一切顺利!
我正在尝试使用 django-smart-selects 模块来创建相关的下拉列表。我遵循了文档并定义了我使用 'ChainedForeignKey' 的模型,以便在我的公司和我的产品之间定义 link。
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']
数据是从我的数据库中检索的,我可以从第一个下拉列表中 select 一家公司。但是,第二个列表 (Product) 是锁定的。我已将产品关联到我数据库中的公司(使用外键)。
如果你们对我如何解决这个问题有任何想法,那就太好了。我搜索过类似的问题,但找不到类似的问题。
这是表格的屏幕截图。
我使用了 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`
第 3 步: 将 'smart_selects',
添加到 settings.py
中的 INSTALLED_APPS
列表。
第 4 步:在您的应用的 models.py
中添加 from smart_selects.db_fields import ChainedForeignKey
。
第 5 步: 将 smart_selects
网址添加到项目的 urls.py
中。 Chained Selects
和 Chained ManyToMany
选择需要这样做。例如:
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^chaining/', include('smart_selects.urls')),
)
第 6 步:您还需要在包含来自 smart_selects
的字段的每个页面中包含 jQuery。在项目的 settings.py
中添加 USE_DJANGO_JQUERY = True
。
第 7 步: 在 HTML 文件中的 {{ form.as_table }}
之前添加 {{ form.media.js }}
,以便从 Django 模型派生的 Django 表单反映智能选择功能。
我正在使用 Python 2.7.10 和 Django 1.11。
祝一切顺利!