【问题标题】:getting wrong format of date in Django在 Django 中获取错误的日期格式
【发布时间】:2022-01-09 20:24:41
【问题描述】:

我正在尝试创建一个表单来接收用户的日期输入,然后将该输入传递给我的另一个 python 脚本,我的 Django 表单代码如下

from Django import forms


class NameForm(forms.Form):
    lev=forms.IntegerField(label='lev')
    status = forms.CharField(label='status', max_length=100)
    start_date = forms.DateField(widget=forms.DateInput(format = '%Y/%m/%d',attrs={'type': 'date'}))

我在views.py 文件中接收日期和所有其他值,然后将它们传递给我的python 脚本,我的views.py 代码是

def generate(request):
    form=NameForm(request.POST)
    if form.is_valid():
        a=str(form.cleaned_data.get('lev'))
        b= form.cleaned_data.get('status')
        c=str(form.cleaned_data.get('start_date'))
       


    output=run([sys.executable,'C:\\Users\\siddhant\\Desktop\\internship\\indicator\\work\\water.py',a,b,c],stdout=PIPE,text=True)
    

    events_list=level.objects.all()
    return render(request,'result.html',{'res':events_list})

我正在我的 work.py 代码中对传递的日期进行 strptime 转换,如下所示

current_level=int(sys.argv[1])
x=sys.argv[2]
start_date=sys.argv[3]
print(start_date)
start=datetime.strptime(start_date, "%y/%d/%m")

但我收到 ValueError: time data '2022-01-01' does not match format '%y/%d/%m' 请有人建议如何解决这个问题

【问题讨论】:

    标签: python html django datetime web-development-server


    【解决方案1】:

    调用函数时需要正确格式化date对象:

    def generate(request):
        form = NameForm(request.POST)
        if form.is_valid():
            a = str(form.cleaned_data['lev'])
            b = form.cleaned_data.get('status')
            c = form.cleaned_data.get('start_date').strftime('%y/%d/%M')
            output=run([sys.executable,'C:\\Users\\siddhant\\Desktop\\internship\\indicator\\work\\water.py',a,b,c],stdout=PIPE,text=True)

    water.py程序中,你应该用%M解析它,而不是%m,否则你解析的是分钟,而不是

    current_level = int(sys.argv[1])
    x = sys.argv[2]
    start_date = sys.argv[3]
    print(start_date)
    start = datetime.strptime(start_date, "%y/%d/%M")

    【讨论】:

    • 我试过了,没用,问题是我的输入日期格式是 '2022-01-01' 但在 strptime 将此字符串更改为 datetime 对象,"%y/%d/% M" 我要去这就是为什么显示错误我想将输入日期格式从 '2022-01-01' 更改为 '2022/01/01'
    • @SiddhantsinghBhadauria:这是因为form.cleaned_data.get('start_date')date 对象,而date 对象的str(..) 始终是yyyy-mm-dd。这就是为什么你应该使用strftime
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2018-05-31
    • 1970-01-01
    • 2012-05-16
    • 2019-12-02
    • 2020-12-12
    相关资源
    最近更新 更多