[英]Django form.is_valid giving False
ModelsForm以ISO格式返回日期時間,如:
2019-04-10T06:30:00
在views.py中,我正在檢查響應字符串中包含的字符“T”,並將ISO轉換為python日期時間格式。 此后,我用新值替換表單字段。
如果字符串僅包含日期 - 2019-04-10 ,則event_form.is_valid()返回True並且正在創建新的instanse。 但是如果字符串包含時間,則is_valid返回False。
views.py
def event(request):
all_events = Events.objects.all()
if request.method == 'POST':
event_form = ModelEventsForm(request.POST)
start = (event_form['start_date'].value())
end = (event_form['end_date'].value())
if 'T' in start and end:#Check that time include in data string (for create events from daily and week view)
start = datetime.strptime(start, "%Y-%m-%dT%H:%M:%S")
end = datetime.strptime(end, "%Y-%m-%dT%H:%M:%S")
event_form = ModelEventsForm(initial={'start_date': start, 'end_date': end})
if event_form.is_valid():
update = event_form.save(commit=False)
update.owner = request.user.profile
update.start_date = event_form.cleaned_data['start_date']
update.end_date = event_form.cleaned_data['end_date']
update.save()
return redirect('events:event')
else:
event_form = ModelEventsForm()
context = {
"events": all_events,
'event_form': event_form
}
return render(request, 'profile/event_management.html', context)
form.py
<form method="POST">
{% csrf_token %}
<div class="form-group">
<label for="event_name">Event name</label>
{% render_field event_form.event_name class="form-control" id='event_name' %}
</div>
<div class="form-group">
<label for="start-date">Event start</label>
{% render_field event_form.start_date class="form-control datepicker" id='start-date' %}
</div>
<div class="form-group">
<label for="end-date">Event end</label>
{% render_field event_form.end_date class="form-control datepicker" id='end-date' %}
</div>
<button type="submit" class="btn btn-primary">Создать событие</button>
</form>
modelforms.py
class ModelEventsForm(forms.ModelForm):
class Meta:
model = Events
exclude = ['event_type', 'owner']
models.py
class Events(models.Model):
owner = models.ForeignKey(Profile, blank=True, null=True, on_delete=models.CASCADE)
event_name = models.CharField(max_length=255)
start_date = models.DateTimeField(null=True)
end_date = models.DateTimeField(null=True)
event_type = models.CharField(max_length=10)
start和end值是適當的python datetime格式
2019-04-09 19:00:00
它是否使用此代碼
def event(request):
all_events = Events.objects.all()
if request.method == 'POST':
event_form = ModelEventsForm(request.POST)
start = (event_form['start_date'].value())#get datetime string from request
end = (event_form['end_date'].value())
#transform string to python datetime
if 'T' in start and end:
start = datetime.strptime(start, "%Y-%m-%dT%H:%M:%S")
end = datetime.strptime(end, "%Y-%m-%dT%H:%M:%S")
else:
start = datetime.strptime(start, "%Y-%m-%d")
end = datetime.strptime(end, "%Y-%m-%d")
update_request = request.POST.copy()
update_request.update({'start_date': start, "end_date": end})
event_form = ModelEventsForm(update_request)
if event_form.is_valid():
update = event_form.save(commit=False)
update.owner = request.user.profile
update.start_date = event_form.cleaned_data['start_date']
update.end_date = event_form.cleaned_data['end_date']
update.save()
return redirect('events:event')
else:
event_form = ModelEventsForm()
context = {
"events": all_events,
'event_form': event_form
}
return render(request, 'profile/event_management.html', context)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.