Fix datetime filter.

This commit is contained in:
long2ice
2021-05-22 13:12:04 +08:00
parent 4e8b0093eb
commit 412069b9f5
3 changed files with 35 additions and 11 deletions

View File

@@ -5,7 +5,8 @@
<div class="d-inline-block">
<input {% if not null %}
required
{% endif %} class="form-control" type="text" id="{{ name }}" name="{{ name }}" value="{{ value }}">
{% endif %} class="form-control" type="text" id="{{ name }}" name="{{ name }}" value="{{ value }}"
placeholder="{{ placeholder }}" size="30">
</div>
</div>
<script>
@@ -14,7 +15,7 @@
let format = '{{ format }}';
let option = {
autoUpdateInput: false,
timePicker: true,
timePicker: {% if not date %}true{% else %}false{% endif%},
timePicker24Hour: true,
locale: {
format: format,

View File

@@ -1,7 +1,8 @@
import abc
from enum import Enum as EnumCLS
from typing import Any, Optional, Type
from typing import Any, Optional, Type, Tuple
import pendulum
from starlette.requests import Request
from tortoise import Model
from tortoise.queryset import QuerySet
@@ -53,7 +54,12 @@ class Datetime(Filter):
template = "widgets/filters/datetime.html"
def __init__(
self, name: str, label: str, format_: str = constants.DATE_FORMAT_MOMENT, null: bool = True
self,
name: str,
label: str,
format_: str = constants.DATETIME_FORMAT_MOMENT,
null: bool = True,
placeholder: str = "",
):
"""
Datetime filter
@@ -61,23 +67,39 @@ class Datetime(Filter):
:param label:
:param format_: the format of moment.js
"""
super().__init__(name + "__range", label, null=null, format=format_)
super().__init__(
name + "__range", label, null=null, format=format_, placeholder=placeholder
)
async def parse_value(self, request: Request, value: Optional[str]):
return value.split(" - ")
if value:
ranges = value.split(" - ")
return pendulum.parse(ranges[0]), pendulum.parse(ranges[1])
async def render(self, request: Request, value: Any):
async def render(self, request: Request, value: Tuple[pendulum.DateTime, pendulum.DateTime]):
format_ = self.context.get('format')
if value is not None:
value = " - ".join(value)
value = (
value[0].format(format_)
+ " - "
+ value[1].format(format_)
)
return await super().render(request, value)
class Date(Datetime):
def __init__(
self, name: str, label: str, format_: str = constants.DATE_FORMAT_MOMENT, null: bool = True
self,
name: str,
label: str,
format_: str = constants.DATE_FORMAT_MOMENT,
null: bool = True,
placeholder: str = "",
):
super().__init__(name=name, label=label, format_=format_, null=null)
super().__init__(
name=name, label=label, format_=format_, null=null, placeholder=placeholder
)
self.context.update(date=True)
class Select(Filter):
template = "widgets/filters/select.html"