使用 Crispy Forms 渲染 django-filter(filterset) 栏

问题描述 投票:0回答:2

我创建了一个过滤器栏(使用 django-filter 模块中的过滤器集),但我无法以脆脆的形式呈现它。

crispy-forms 与 django-filter 兼容吗?我尝试过,Crispy Forms 与我所有其他表单和模型表单都能很好地配合,但 django-filter 似乎拒绝在 Crispy-bootstrap 中渲染。

HTML:

{% extends 'base/base1.html' %}
{% load static %}
{% block content %}

{% load crispy_forms_tags %}
<div class="row">
  <div class="col">
    <div class="card card-body">
      <form method="get">
            ****{{ myFilter.form}}****
    */tried also       {{ myFilter.form|crispy}} 
                       {{ myFilter.form.variablefieldhere|as_crispy_field}}** 
        <button class="btn btn-primary" type="submit">
        Search</button>
      </form>
    </div>
  </div>
</div>

过滤器.py:

import django_filters
from .models import log

class logFilter(django_filters.FilterSet):
    class Meta:
        model = log
        fields = {
            'varfliedhere': ['icontains'],
            'varfliedhere': ['icontains'],
            'varfliedhere': ['icontains'],
            'Boolean varfliedhere': ['exact'],

        }

我应该尝试在表单中设置FormHelper吗?但在这种情况下,我该如何将其呈现为 Crispy Forms 呢?

在其他形式中,我将它们一一呈现为:

{{ myFilter.form.variablefieldhere|as_crispy_field}}

这有效,但我不明白如何解决这个问题。

django django-filter django-crispy-forms
2个回答
0
投票

由于我不清楚您的要求。但我假设您希望所有字段都在单行中,并且您正在使用 Cripyform 的引导模板。

<form method="GET">
   <div class="form-row">
      <div class="form-group col-md-2 mb-0 ">
      {{myFilter.form.variablefieldhere1|as_crispy_field}}
      </div>
      <div class="form-group col-md-2 mb-0 ">
      {{myFilter.form.variablefieldhere2|as_crispy_field}}
      </div>
      <div class="form-group col-md-2 mb-0 ">
      {{myFilter.form.variablefieldhere3|as_crispy_field}}
      </div>
      <div class="form-group col-md-2 mb-0 ">
      {{myFilter.form.variablefieldhere4|as_crispy_field}}
      </div>
      <div class=" col-md-2 mb-0 ">
         <button class="btn btn-primary btn-sm" type="submit">search</button>
      </div>
   </div>
</form>

0
投票

因为我在尝试渲染各个过滤器字段时遇到了同样的问题:问题可能是您在元类中初始化了查找表达式。

当我在类 Body 中显式定义变量时,它对我有用。 试试这个:

import django_filters
from .models import log

class logFilter(django_filters.FilterSet):
    varvield1 = django_filters.CharFilter(lookup_expr="icontains")
    varvield2 = django_filters.CharFilter(lookup_expr="icontains")
    
    class Meta:
        model = log
        fields = ["varfield1", "varfield2"]

然后在您的 HTML 中只需遵循 khadim husen 的答案即可。

© www.soinside.com 2019 - 2024. All rights reserved.