Django Forms:手动样式表(复选框) - 输入在标签

时间:2018-03-27 16:52:50

标签: python django django-forms

我需要在html模板中以以下格式呈现复选框form fields

<input id="tag" type="checkbox" name="check" value="1">
<label for="tag">Tag 1</label>

目前,我在模板中尝试过:

{{ filter.form.tags.errors }}
{% for field in filter.form.tags %}
<input id="{{ field.id_for_label }}" type="checkbox" name="check">
<label for="{{ field.id_for_label }}">{{ field.value }}</label>
{% endfor %}

这不会呈现{{ field.value }}(我变空而不是标签1)并且也不会粘。

我也尝试过:

{% for field in filter.form.tags %}
{{ field.label_tag }}
{{ field }}
{% endfor %}

这使我嵌套了<label><input></input></label>,但显示了我需要的所有内容。

是否有可能呈现一个表单,以便我获得我所追求的格式? (它还应该保留checked,例如让刻度变得粘稠。)

修改

class TaskFilter(django_filters.FilterSet):
    """Filter for books by author"""
    tags = django_filters.ModelMultipleChoiceFilter(widget=forms.CheckboxSelectMultiple, queryset=Task.tags.most_common())
    title = django_filters.CharFilter(field_name='title', lookup_expr='icontains')

    class Meta:
        model = Task
        fields = ['tags', 'title']

views.py

def task_list_filter(request):
    if request.method == 'GET':
        form = AdditionalForm(request.GET)
        # process the form
        results = Task.objects.all().order_by('-created')

    f = TaskFilter(request.GET, queryset=results)

    # Output final query set
    results = f.qs[0:100]  # only get first 100 objects

    # Create pagination

    # Get the view

    return render(request, 'base/task_list_filter.html', {'filter': f,
                                                    'task_list': results,
                                                    'form': form })

2 个答案:

答案 0 :(得分:2)

要确保复选框处于正确状态,您可以使用自己提供的示例进行一些更改:

{% for field in filter.form.tags %}
<input type="checkbox" id="{{ field.id_for_label }}"
       name="{{ field.html_name }}"
       {% if field.value %}checked{% endif %}>
<label for="{{ field.id_for_label }}">{{ field.value }}</label>
{% endfor %}

请记住,您可以使用{{ field.label_tag }}生成整个标签HTML标记。

答案 1 :(得分:1)

在HTML

{% for field in filter.form.tags %}
{{ field.tag }}  <!-- Generates the checkbox for the field -->
{{ field.choice_label }}  <!-- Generates the named label of the field -->
{% endfor %}

我从this guy那里学到了很多关于使用Django的有用信息。