【问题标题】:How to save form by using Input type = "datetime-local" In Django如何在 Django 中使用 Input type = "datetime-local" 保存表单
【发布时间】:2019-03-08 19:07:18
【问题描述】:

在我的表单中,我有一个 ENDDATE AND TIME 输入字段,但是当我选择结束日期和时间并提交时,表单无效。这里我提到了我的 html,views.py models.py 和 form.py。我不知道为什么会这样,所以请帮我这样做。

HTML

<label>End Date & Time</label>
  <div >
     <input class="form-control" id="party"  type = "datetime-local" name="end_date">
   </div> 

Views.py

def event(request):
    if request.method == 'POST':
        form = EventForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            messages.success(request, "Insertion Success!")
            return redirect('/event')
        else:

            messages.success(request,"You missed to fill some fields!")
            return HttpResponse(form)

form.py

class EventForm(forms.ModelForm):
   class Meta:
       model = Events
       fields = ['end_date']
       widgets = {
        'end_date': DateTimeInput(attrs={'type': 'datetime-local'}),
}

models.py

class Events(models.Model):
    end_date =models.DateTimeField(auto_now=False,blank=True)

【问题讨论】:

  • 如果你在你的模板中输出{{ form.errors }},那么Django会告诉你为什么它是无效的。
  • 我猜DateTimeInput 正在返回一个字符串,而DateTimeField 正在等待list
  • @DanielRoseman @Vineeth Sai 如果我尝试保存表单无效return HttpResponse(form) 它以这种格式返回2018-10-05T01:01 但预期的输出类似于2018-10-05T11:11:00Z 所以我已经删除了form.py 中的小部件请帮我做这件事,谢谢。
  • 真是一个令人愤怒的问题。

标签: python django django-models django-forms django-templates


【解决方案1】:

除了小部件之外,您还需要在字段中设置格式。

https://stackoverflow.com/a/53194594/3057341

【讨论】:

    【解决方案2】:
      <div >
         <input class="form-control" id="party"  type = "datetime-local" name="end_date">
       </div> 
    

    此代码必须包含 form 用于呈现表单的模板

    把代码改成这样:

    <form>
    {% csrf_token %}
    {{ form.as_p  }}
    </form>
    

    在事件视图更改中使用如下代码:

    from .forms import EventForm 
    def event(request):
        if request.method == 'POST':
            form = EventForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                messages.success(request, "Insertion Success!")
                return redirect('/event')
            else:
    
                messages.success(request,"You missed to fill some fields!")
                return HttpResponse(form)
    
        else:
            form=EventForm()
            return render(request,'your template name ',context={'form':form})
    

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2012-09-16
      • 1970-01-01
      • 2022-12-14
      • 2015-07-14
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多