繁体   English   中英

带有两个日期的 Django 过滤器

[英]django filter with two dates

我想在我输入 HTML 表单的两个日期之间从数据库中过滤数据。

我的 Form.html

<form action=""method="post">
          {% csrf_token %}
          <input type="date" class="form-control" name="startDate" id="startDate" required><br>
          <input type="date" class="form-control" name="endDate" id="endDate" required><br>
          <button style="margin-left:150px;"type="submit" class="btn btn-success" name="date_filter">ok</button>
        </form>

我的模型.py

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class TimesheetDetails(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE,related_name="timesheet",null="True")
    username = models.CharField(max_length = 30)
    date = models.DateField(max_length = 10)
    day = models.CharField(max_length = 10)
    startTime = models.CharField(max_length =10)
    endTime = models.CharField(max_length =10)
    breakTime = models.CharField(max_length=3)
    normalTime = models.CharField(max_length=10)
    overTime = models.CharField(max_length = 10)
    holidayTime = models.CharField(max_length = 10)
    weekType = models.CharField( max_length = 10)
    attendance = models.CharField( max_length = 10)
    content = models.TextField( max_length = 300)

我的意见.py

def view_timesheet(request):
    if request.method == "POST":
        if('startDate' and 'endDate') in request.POST:
            startDate = request.POST.get('startDate')
            print(startDate)
            print (type(startDate))
            endDate = request.POST.get('endDate')
            print(endDate)
            print (type(endDate))
            user_row_count = TimesheetDetails.objects.filter(user=request.user)
            print(user_row_count)
            #dateRange = user_row_count.filter(date__range=['startDate','endDate']).count()
            #print(dateRange)
            #context = {'dateRange': dateRange}
            #print(context)
            return redirect('/total')

这是我现在得到的输出。

输出

2019-12-06 2019-12-28 , , ]>

但是当我取消注释以下行并比较日期时,我收到以下错误。 任何帮助将不胜感激。

ValidationError at /list/
["'startDate' value has an invalid date format. It must be in YYYY-MM-DD format."]
Request Method: POST
Request URL:    http://127.0.0.1:8000/list/
Django Version: 2.2.8
Exception Type: ValidationError
Exception Value:    
["'startDate' value has an invalid date format. It must be in YYYY-MM-DD format."]
Exception Location: D:\Django\TimeSheetProject\morabu\lib\site-packages\django\db\models\fields\__init__.py in to_python, line 1249
Python Executable:  D:\Django\TimeSheetProject\morabu\Scripts\python.exe
Python Version: 3.7.2
Python Path:    
['D:\\Django\\TimeSheetProject',
 'D:\\Django\\TimeSheetProject\\morabu\\Scripts\\python37.zip',
 'D:\\Django\\TimeSheetProject\\morabu\\DLLs',
 'D:\\Django\\TimeSheetProject\\morabu\\lib',
 'D:\\Django\\TimeSheetProject\\morabu\\Scripts',
 'c:\\program files\\python\\Lib',
 'c:\\program files\\python\\DLLs',
 'D:\\Django\\TimeSheetProject\\morabu',
 'D:\\Django\\TimeSheetProject\\morabu\\lib\\site-packages']
Server time:    Fri, 27 Dec 2019 15:57:13 +0900

我还尝试将 models.py 中的日期更改为 CharField 并且没有收到任何错误,但我的过滤计数为 0。

您可以使用像dateutil这样的库

from dateutil.parser import parse
date_string = "12/27/2019"
django_understandable_date = parse(c)

您也可以考虑使用datetime

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM