gpt4 book ai didi

python - Django - 通过验证过滤范围内的日期

转载 作者:太空宇宙 更新时间:2023-11-03 15:02:07 32 4
gpt4 key购买 nike

我在模型中有一个名为“session_start”的 DateTimeField。我正在尝试过滤日期范围内的 session_start 字段。

模型.py

class TimeCard(models.Model):
profile = models.ForeignKey(settings.AUTH_USER_MODEL)
session_start = models.DateTimeField()

过滤器需要满足以下条件:

  1. 在“start_date”和“end_date”范围内过滤“session_start”字段。
  2. 验证“开始日期”和“结束日期”字段。这意味着“start_date”值应该是“end_date”值之前的日期。如果传递了无效数据,则根据默认值返回queryset。默认值为 -

start_date = 从今天开始 30 天。

结束日期 = 今天。

我编写了以下代码来过滤“start_date”和“end_date”之间范围内的“session_start”字段。现在我一直在检查 start_date 大于 end_date 的条件。我该怎么做才能进行验证?

过滤器.py

class TimeCardFilter(filters.FilterSet):

start_date = django_filters.DateTimeFilter(name="session_start", lookup_type='gte')
end_date = django_filters.DateTimeFilter(name="session_start", lookup_type='lte')

class Meta:
model = TimeCard
fields = ['profile', 'start_date', 'end_date']

最佳答案

您实际上可以使用 django formsdjango-filters 过滤器集中,因此您可以在表单的 clean() 方法中管理验证。您的 filter.py 可能看起来像这样:

import django_filters
from app.models import TimeCard
from django import forms


class TimeCardFilter(django_filters.FilterSet):

start_date = django_filters.DateTimeFilter(
name="session_start",
lookup_type="gte")
end_date = django_filters.DateTimeFilter(
name="session_start",
lookup_type="lte")

class Meta:
model = TimeCard
form = TimeCardForm


class TimeCardForm(forms.Form):

def clean(self):
cleaned_data = super(TimeCardForm, self).clean()
start_date = cleaned_data.get("start_date")
end_date = cleaned_data.get("end_date")

if start_date > end_date:
self._errors['start_date'] = self._errors.get('start_date', [])
self._errors['start_date'].append("Start date must be before end date.")

return cleaned_data

关于python - Django - 通过验证过滤范围内的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36768690/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com