如何在带有日期字段的Django中使用FilterSet

2024-09-28 03:20:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个dat_transacao字段,我想用它创建一个范围,但它没有工作。我在filters.py中创建了dat_inicial和{},但是屏幕没有按这些字段过滤记录。有点不对劲,但我不知道是什么。有人能帮我吗? 谢谢。在

在模型.py公司名称:

class transacao(models.Model):
    dat_transacao = models.DateTimeField('Geração da Transação', auto_now=True)
    pessoa = models.ForeignKey(pessoa, default='', blank=True, null=True) # Chave estrangeira da Classe Pessoa
    tipotransacao = models.ForeignKey(tipotransacao, default='', blank=True, null=True) # Chave estrangeira da Classe Tipo de Transação
    servico = models.ForeignKey(servico, default='', blank=True, null=True) # Chave estrangeira da Classe Servico (que pode ser NULL)
    bloco = models.ForeignKey(bloco, default='', blank=True, null=True) # Chave estrangeira da Classe Bloco

在过滤器.py公司名称:

^{pr2}$

在视图.py在

def transacao_livrorazao(request, id=None):
    instancia_transacao = transacao.objects.all().order_by('-dat_transacao')
    instancia_transacaofilter = livrorazaoFilter(request.GET, queryset=instancia_transacao)
    context = {
            "queryset": instancia_transacao,
            "filter": instancia_transacaofilter,
            "instancia_transacao": instancia_transacao
    }
    return render(request, 'livrorazao/livrorazao.html', context)

在livroazao.html公司名称:

<!DOCTYPE html>
<html dir="ltr">

        <form class=" bd-form-2 " action="#" name="form-name" method="get">
            {% csrf_token %}

        <p>Período</p>
        <p>De</p>
            <input type="date" name='filter.form.dat_inicial' id="dat_inicial"  class="bd-form-input" >
        <p>até</p>
            <input type="date" name='filter.form.dat_final' id="dat_final"  class="bd-form-input" >
        <p>Tipo de Transação</p>
             {{ filter.form.tipotransacao }}

         <button type="submit">Consultar</button>
        </form>

        <br>
        <table width="100%" border="0" cellspacing="1" cellpadding="2">
        <tbody><tr>
            <th>ID Transação</th>
            <th>Data/Hora</th>
            <th>TipoTransação</th>
            <th>Blockchain</th>
        </tr>

      {% for instance in filter.qs  %}
        <tr>
            <td>{{ instance.id }}</td>
            <td>{{ instance.dat_transacao }}</td>
            <td>{{ instance.tipotransacao }}</td>
            <!--<td>{{ instance.pessoa }}</td>-->
            <td>{{ instance.bloco }}</td>
        </tr>
      {% endfor %}

</tbody></table>
</html>

Tags: instancepyformtruemodelshtmlfilterclass
2条回答

我的解决方案与@cezar发布的类似。然而,将attrs={'class': 'datepicker'}改为{}}对我来说很管用。在

我的前端窗体显示是使用django-widget-tweaks管理的

以下是对我有用的摘录:

在模型.py在

class Applications(models.Model):
    #...
    status = models.CharField(max_length=10, choices=STATUS)
    start_date = models.DateTimeField(auto_now_add=True)

在过滤器.py在

^{pr2}$

在视图.py在

from django.shortcuts import render
from .models import Applications
from .filters import ApplicationFilter

def application_search(request):
    #... I stripped the view function down to what concerns filters.py
    application_list = Application.objects.all()
    application_filter = ApplicationFilter(request.GET, queryset=application_list)

    return render(
        request,
        "applications.html,
        {'filter': application_filter}
    )

在应用程序.html(带引导)

...
{% load bootstrap4 %}{% load widget_tweaks %}
<form method="GET" class="form-inline">
<div class=form-group>
<label style="margin-right: 20px">Filter: </label>
{% render_field filter.form.status class="form-control"%}
<label style="margin-left: 20px; margin-right: 10px;">From </label>
{% render_field filter.form.start_date class="form-control" %}
<button style="margin-left: 10px" class="btn btn-primary btn-md">
 GO
</button>
</div>
</form>
...

注:默认情况下,我添加了django_filters到设置.py在

Here's how the form looks

您可以使用DateFromToRangeFilter。代替dat_inicialdat_final,将此片段添加到FilterSet类中:

dat_transacao = django_filters.DateTimeFromToRangeFilter()

此筛选器应创建两个输入字段,并查询值介于下限和上限之间的条目。通过传递更多参数,您可以修改外观和行为,例如add datepicker:

^{pr2}$

然后根据需要调整HTML模板。基本上,它应该与以下线路一起工作:

<form class="bd-form-2 " action="" name="form-name" method="get">
    {% csrf_token %}
    {{ filter.form }}
    <button type="submit">Consultar</button>
</form>

相关问题 更多 >

    热门问题