我试图弄清楚如何在django-filter中使用datepicker。我尝试了一些小部件,但它没有工作。任何建议将不胜感激!
我想将datepicker用于row_date搜索过滤器。
filters.py
from home2.models import AvailstaticCopy
from django import forms
import django_filters
class DateInput(forms.DateInput):
input_type = 'date'
class AvailFilter(django_filters.FilterSet):
class Meta:
model = AvailstaticCopy
widgets = {'row_date': DateInput(),}
fields = ['row_date', 'director','manager','analyst',]
这是我的模板
{% load widget_tweaks %}
<form method="get">
<div class="well">
<h4 style="margin-top: 0">Filter</h4>
<div class="row">
<div class="form-group col-sm-4 col-md-3">
{{ filter.form.row_date.label_tag }}
{% render_field filter.form.row_date class="form-control" %}
</div>
<div class="form-group col-sm-4 col-md-3">
{{ filter.form.director.label_tag }}
{% render_field filter.form.director class="form-control" %}
</div>
<div class="form-group col-sm-8 col-md-6">
{{ filter.form.manager.label_tag }}
{% render_field filter.form.manager class="form-control" %}
</div>
<div class="form-group col-sm-8 col-md-6">
{{ filter.form.analyst.label_tag }}
{% render_field filter.form.analyst class="form-control" %}
</div>
<div class="form-group col-sm-8 col-md-6">
<button type="submit" class="btn btn-primary">
<span class="glyphicon glyphicon-search"></span> Search
</button>
</div>
</div>
</div>
</form>
答案 0 :(得分:3)
你不清楚你想到的是什么样的日期选择,但我认为你想要这样的东西:
jQuery UI Datepicker
我希望您知道如何使用第三方JavaScript库。这应该超出了这个问题的范围。
将项目设置为使用jQuery UI后,您可以更改filters.py
:
class AvailFilter(django_filters.FilterSet):
row_date = django_filters.DateFilter(
widget=DateInput(
attrs={
'class': 'datepicker'
}
)
)
class Meta:
# keep everything but the line widgets
您使用的任何小部件都接受一个关键字参数attrs
,它接受一个字典,您可以在其中指定HTML标记的所有属性。
现在当你渲染row_date
时,它应输出如下内容:
<input type="date" class="datepicker" ... />
答案 1 :(得分:1)
要提供类似于cezar答案的另一个答案,我在下面用过滤器和模板代码这样做。
filter.py
import django_filters
from .models import Product
from django import forms
class ProductFilter(django_filters.FilterSet):
name = django_filters.CharFilter(lookup_expr='icontains')
price = django_filters.NumberFilter()
# using jquery
djfdate_time = django_filters.DateFilter(
lookup_expr='icontains',
widget=forms.DateInput(
attrs={
'id': 'datepicker',
'type': 'text'
}
)
)
class Meta:
model = Product
fields = ['name', 'djfdate_time','price']
base.html
{% load static %}
<html>
<head>
<link rel="stylesheet" type="text/css" href="{% static 'css/search.css' %}">
<title></title>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
</head>
<body>
<div id="header">
<h1 ><a class="searchtitle" href="/">Django Filter Example</a></h1>
</div>
<div id="content">
{% block content %}
{% endblock %}
</div>
<script>
$( function() {
$( "#datepicker" ).datepicker();
} );
</script>
</body>
</html>
base_extension.html
{% extends "base.html" %}
{% load my_templatetags %}
{% block content %}
<form action="" method="get">
<div>Name{{ filter.form.name }}</div>
<div>Price{{ filter.form.price }}</div>
<div>Date_Time{{ filter.form.djfdate_time }}</div>
<input type="submit" />
</form>
{% for obj in dataqs.object_list %}
{{ obj.name }}
<div>
<li>${{ obj.price }}</li>
<li> {{ obj.djfdate_time|date:'m-d H:i:s.u' }}</li>
</div>
{% endfor %}
{% endblock %}
答案 2 :(得分:1)
type =“ date”可以帮助您,无需任何小部件(取决于浏览器):
class AvailFilter(django_filters.FilterSet):
row_date = django_filters.DateFilter(widget=DateInput(attrs={'type': 'date'}))
如果您还需要日期范围过滤器,则可以使用DateFromToRangeFilter代替DateFilter