Django-filter 多次搜索同一个外键
Django-filter search same foreign key multiple time
我的模型里有这个
models.py
class Exercise(models.Model):
LEVEL_CHOICES = [
('0', '0'),
('1', '1'),
('2', '2'),
('3', '3'),
]
level = models.CharField(
blank=False,
null=False,
max_length=1,
choices=LEVEL_CHOICES
)
...
在我的filters.py
class ExerciseFilter(django_filters.FilterSet):
class Meta:
model = Execise
fields = [ 'name', 'tag', 'level' ]
最后在我的模板中
<form method="get">
<div class="row">
<div class="form-group col">
<span class="">Name<span>
{% render_field filter.form.name class="form-control" %}
</div>
<div class="form-group col">
<span class="">Level<span>
{% render_field filter.form.level class="form-control" %}
</div>
<div class="form-group col">
<span class="">Tags<span>
{% render_field filter.form.tag class="form-control" %}
</div>
</div> </form>
它工作正常,我可以过滤我的练习,例如只看到级别 1 的练习。
它给了我一个 URL 这样的
?name=&level=1&tag=
但我希望能够进行 1 级和 2 级的锻炼,例如,像这样:
?name=&level=1&level=2&tag=
不知道如何实现...
我没用过 django-filter
,但根据文档我认为你可以使用 ModelMultipleChoiceFilter
。参见 (this) and (this)。
谢谢@dj-ramones
可能应该更仔细地阅读文档...
我在 filters.py 中做了什么:
class ExerciseFilter(django_filters.FilterSet):
level = django_filters.MultipleChoiceFilter(choices=Exercise.LEVEL_CHOICES)
class Meta:
model = Execise
fields = [ 'name', 'tag', 'level' ]
所以,现在,我可以 select 多层次。非常感谢
我的模型里有这个
models.py
class Exercise(models.Model):
LEVEL_CHOICES = [
('0', '0'),
('1', '1'),
('2', '2'),
('3', '3'),
]
level = models.CharField(
blank=False,
null=False,
max_length=1,
choices=LEVEL_CHOICES
)
...
在我的filters.py
class ExerciseFilter(django_filters.FilterSet):
class Meta:
model = Execise
fields = [ 'name', 'tag', 'level' ]
最后在我的模板中
<form method="get">
<div class="row">
<div class="form-group col">
<span class="">Name<span>
{% render_field filter.form.name class="form-control" %}
</div>
<div class="form-group col">
<span class="">Level<span>
{% render_field filter.form.level class="form-control" %}
</div>
<div class="form-group col">
<span class="">Tags<span>
{% render_field filter.form.tag class="form-control" %}
</div>
</div> </form>
它工作正常,我可以过滤我的练习,例如只看到级别 1 的练习。 它给了我一个 URL 这样的
?name=&level=1&tag=
但我希望能够进行 1 级和 2 级的锻炼,例如,像这样:
?name=&level=1&level=2&tag=
不知道如何实现...
我没用过 django-filter
,但根据文档我认为你可以使用 ModelMultipleChoiceFilter
。参见 (this) and (this)。
谢谢@dj-ramones
可能应该更仔细地阅读文档...
我在 filters.py 中做了什么:
class ExerciseFilter(django_filters.FilterSet):
level = django_filters.MultipleChoiceFilter(choices=Exercise.LEVEL_CHOICES)
class Meta:
model = Execise
fields = [ 'name', 'tag', 'level' ]
所以,现在,我可以 select 多层次。非常感谢