Django-不使用ForeignKeys的从属下拉过滤器

时间:2019-02-01 08:26:30

标签: python django django-filter

Django中是否有一种无需uisng ForeignKeys即可创建依赖下拉菜单的方法?

可以说我有以下模型:

class CSV4(models.Model):
    var1 = models.CharField(max_length=100)
    var2 = models.CharField(max_length=100)
    var3 = models.CharField(max_length=100)
    var4 = models.CharField(max_length=100)
    var5 = models.CharField(max_length=100)
    var6 = models.CharField(max_length=100)
    var7 = models.CharField(max_length=100)
    var8 = models.CharField(max_length=100)
    var9 = models.CharField(max_length=100)

因此var2应该取决于在var1中选择的内容,依此类推。

我在我的filters.py中尝试了此操作,并且该过滤器可以工作,但它并不依赖于

class CSVFilter(django_filters.FilterSet):
    entries = CSV.objects.values_list('var1', flat = True).distinct()
    var1_choices = [(e, e) for e in entries]
    #print("e" , var1_choices )
    var1= django_filters.ChoiceFilter(choices = var1_choices )

    entries = CSV.objects.values_list('var1', flat=True).distinct()
    var2_choices = [(e, e) for e in entries]
    var2= django_filters.ChoiceFilter(choices=var2_choices )

    var3= CSV.objects.values_list('var3', flat=True).distinct()
    var3_choices = [(e, e) for e in entries]
    var3= django_filters.ChoiceFilter(choices=var3_choices )

    var4= CSV.objects.values_list('var4', flat=True).distinct()
    var4_choices = [(e, e) for e in entries]
    var4= django_filters.ChoiceFilter(choices=var4_choices )

在模板中:

<form method="POST">
    {% csrf_token %}
    {{ filter.form }}
    <button type="submit">Search</button>
</form>
<ul>

  {% for i in filter.qs %}
        <li>
     {{ i.var1}} - {{ i.var2}} - {{ i.var3}}
     - {{ i.var4}} 


        <a href = "{% url 'appp:edit_results' i.id %}">
            <button>Edit</button>
        </a>

        </li>

  {% endfor %}
</ul>

所以基本上我有两个问题:

  1. 有没有一种方法(理想情况下无需使用大量JavaScript)就可以创建依赖的下拉菜单,而无需使用ForeignKeys和一个Model?

  2. 是否有一种方法只能在模板中显示过滤的结果。使用我当前的解决方案,所有条目都会显示,并且在我进行过滤时会减少。我只想显示下拉过滤器,而每次进行过滤时都显示结果,而不是每次访问页面时都加载所有条目。

0 个答案:

没有答案