【发布时间】:2018-04-03 12:52:48
【问题描述】:
我正在使用 Django-Filter 库 !important。对于标签,我使用的是Django-taggit。
我构建了以下 filter.py:
class TaskFilter(django_filters.FilterSet):
tags = django_filters.ModelMultipleChoiceFilter(widget=forms.CheckboxSelectMultiple, queryset=Task.tags.most_common())
class Meta:
model = Task
fields = ['tags']
但是,当我将此 filter 传递给模板时,它不会正确呈现标签。特别是 {{ field.value }} 是空的。我们来看看以下几个案例:
案例 1。
# template.html
{{ filter.form.tags.errors }}
{% for field in filter.form.tags %}
<label for="{{ field.id_for_label }}"></label>
{{ field.value }}
{% endfor %}
# out
<label for="id_tags_0"></label>
<label for="id_tags_1"></label>
<label for="id_tags_2"></label>
案例 2。
# template.html
{{ filter.form.tags.errors }}
{% for field in filter.form.tags %}
<label for="{{ field.id_for_label }}"></label>
{{ field }}
{% endfor %}
# out
<label for="id_tags_0"></label>
<label for="id_tags_0"><input type="checkbox" name="tags" value="4" id="id_tags_0">Tag 1</label>
<label for="id_tags_1"></label>
<label for="id_tags_1"><input type="checkbox" name="tags" value="1" id="id_tags_1">Tag 2</label>
<label for="id_tags_2"></label>
<label for="id_tags_2"><input type="checkbox" name="tags" value="2" id="id_tags_2">Tag 3</label>
案例 3。
# template.html
{{ filter.form.tags.errors }}
{% for field in filter.form.tags %}
{{ field }}
{{ field.label_tag }}
{% endfor %}
#out
<label for="id_tags_0"><input type="checkbox" name="tags" value="4" id="id_tags_0">Tag 1</label>
<label for="id_tags_1"><input type="checkbox" name="tags" value="1" id="id_tags_1">Tag 2</label>
<label for="id_tags_2"><input type="checkbox" name="tags" value="2" id="id_tags_2">Tag 3</label>
我试图了解为什么会发生这种情况。为什么我不能得到值as stated in the docs
复制步骤
pip install django-filter + add 'django_filters' to APPS
pip install django-taggit + add 'taggit' to APPS
# models.py
class Task(models.Model):
title = models.CharField(max_length=100, blank=False)
tags = TaggableManager()
# Use the API to create an object.
t = Task.objects.create(title="Title")
t.tags.add("Tag 1","Tag 2")
# views.py
def view(request):
f = TaskFilter(request.GET, queryset=Task.objects.all())
return render(request, 'template.html', {'filter': f}
【问题讨论】:
标签: python django django-forms django-filter django-taggit