【问题标题】:django smart_selects, second level won't populatedjango smart_selects,第二级不会填充
【发布时间】:2012-02-27 15:31:33
【问题描述】:

我无法让第二级(子类别/E_cat)下拉填充。第一级(类别)似乎工作正常。我想我已经尝试了 chained_field 和 chained_model_field 选择的所有合理组合,但都没有成功。

我希望使用类别 ID 和子类别 ID 填充 Equip 表。

下面是模型当前的样子。我究竟做错了什么?

model.py

class Category(models.Model):
    cat_no = models.IntegerField(null=True, blank=True)
    cat_txt = models.CharField(max_length=45)    
    def __unicode__(self):
        return self.cat_txt

class E_cat(models.Model):
    cat_no = models.ForeignKey(Category)
    cat_txt = models.CharField(max_length=45)
    scat_no = models.IntegerField(null=True, blank=True)
    scat_txt = models.CharField(max_length=45)
    def __unicode__(self):
        return self.scat_txt


class Equip(models.Model):
    category = models.ForeignKey(Category)
    subcategory = ChainedForeignKey(
        E_cat,
        chained_field="category",
        chained_model_field="cat_no",
        show_all=False,
        auto_choose=True,
    )
    manufacturer = models.CharField(max_length=35, blank=True)
    mfg_no = models.CharField(max_length=35, blank=True)
    size = models.CharField(max_length=35, blank=True)
    color = models.CharField(max_length=35, blank=True)
    quanity = models.IntegerField(null=True, blank=True)
    short_description = models.CharField(max_length=80, blank=True)
    location_zip = models.IntegerField(null=True, blank=True)
    listings = models.ForeignKey(Listings)
    info = models.TextField(null=True, blank=True)

【问题讨论】:

标签: jquery python django jquery-plugins


【解决方案1】:

这看起来不错。问题可能是您没有设置 smart_selects 网址,或者您的实际页面中缺少 javascript。

【讨论】:

  • 我确实设置了网址,并安装了应用程序。我没有看到我必须在我的模板中包含的任何 javascript!如果这是必要的,那么寒冷就是问题所在。我再去看看文档/自述文件。
  • 您需要在模板中添加一个标签,以便显示 javascript。假设您的表单变量的名称是form,您可能已经在模板中的某处拥有{{ form }}。我相信您还需要在模板中的某处添加{{ form.media.js }},以便将 Javascript 插入您的页面。
【解决方案2】:

html.file

如果您使用表单,请包括以下内容

<script src="{% static 'smart-selects/admin/js/chainedfk.js' %}"></script>
<script src="{% static 'smart-selects/admin/js/chainedm2m.js' %}"></script>

models.py

class Continent(models.Model):
        name = models.CharField(max_length=255)
        def __str__(self):
            return self.name

    class Country(models.Model):
        continent= models.ForeignKey(Continent)
        name = models.CharField(max_length=255)
        def __str__(self):
            return self.name

    class City(models.Model):
        continent= models.ForeignKey(Continent)
        country= ChainedForeignKey(Country, chained_field="continent",  chained_model_field="continent", show_all=False, auto_choose=True, sort=True)
        name = models.CharField(max_length=255)
        def __str__(self):
            return self.name

    class Neighborhood(models.Model):
        continent= models.ForeignKey(Continent)
        country= ChainedForeignKey(Country, chained_field="continent",  chained_model_field="continent", show_all=False, auto_choose=True, sort=True)
        name = models.CharField(max_length=255)
        city= ChainedForeignKey(City, chained_field="country",  chained_model_field="country", show_all=False, auto_choose=True, sort=True)
name = models.CharField(max_length=255)
        def __str__(self):
            return self.name

admin.py

admin.site.register(Component)
admin.site.register(Group)
admin.site.register(Failure)
admin.site.register(Neighborhood)

【讨论】:

    【解决方案3】:

    更新 - 2017 年 5 月

    在 jQuery 版本 2 之后包含这个标签。它在使用 python 3.5.2 的 Django 1.10 和 1.11 版本中运行良好。 希望对你有帮助

    <script type="text/javascript" src="{% static 'smart-selects/admin/js/chainedfk.js' %}"></script>
    <script type="text/javascript" src="{% static 'smart-selects/admin/js/chainedm2m.js' %}"></script>
    <script type="text/javascript" src="{% static 'smart-selects/admin/js/bindfields.js' %}"></script>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多