我有在Django一個模型,使毛坯兩個日期字段:Django的:在形式的多個日期字段,允許空白項的問題
class ReleaseStream(models.Model):
name = models.CharField(max_length=200,db_column='name')
version = models.CharField(max_length=20,blank=True,db_column='version')
target_date = models.DateTimeField(null=True,blank=True,db_column='target_date')
actual_date = models.DateTimeField(null=True,blank=True,db_column='actual_date')
description = models.TextField(db_column='description')
...和表單定義:
class ReleaseStreamForm(ModelForm):
class Meta:
model = ReleaseStream
當表單出現時,我可以填寫「target_date」的值,而不是「actual_date」字段,並且當form.save()觸發時,它似乎將爲「target_date」提供的值寫入兩個領域。我已經查看了進入form.save()代碼的post數據,它肯定有一個「target_date」值和一個「actual_date」的值,所以我不認爲有什麼奇怪的表單本身,POST中的變量名等等。
現在,如果我爲「actual_date」提供了一個非空值,form.save()做了正確的事情 - 「target_date」和「actual_date 「寫入了正確的值。我做錯了什麼,或者這可能是django中的一個錯誤?
這裏是模板(對不起,下面:)
{% extends "base.html" %}
{% block title %}{{ form_title }}{% endblock %}
{% block subtitle %}{% endblock %}
{% block content %}
<form action={{ action_url }} method="post">
<table>
{{ form.as_table }}
</table>
<input type="submit" value="Submit" />
</form>
{% endblock %}
空白評論,並處理表單代碼:
def edit_release_stream(request,req_release_stream_id=None):
form_title = 'Edit release stream'
if request.method == 'POST':
if req_release_stream_id!=None:
release_stream_entry=ReleaseStream.objects.get(pk=req_release_stream_id)
form = ReleaseStreamForm(request.POST,instance=release_stream_entry)
else:
form = ReleaseStreamForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/releases/')
elif req_release_stream_id!=None:
release_stream_entry=ReleaseStream.objects.get(pk=req_release_stream_id)
form = ReleaseStreamForm(instance=release_stream_entry)
else:
form_title = 'Add new release stream'
form = ReleaseStreamForm()
return render_to_response('dashboard/tableform.html', {
'action_url': request.get_full_path(),
'form_title': form_title,
'form': form,
})
...而在後的數據來:
<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u''], u'description': [u'']}>
你可以看到它有一個有效的POST變量「actual_date」,它是一個空字符串。這篇文章產生了一個form.save(),它存儲了上面爲「target_date」和「actual_date」提供的「target_date」字符串。
如果我再運行與兩個日期不同值後 - 在這裏是後:
<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u'2011-07-15 00:00'], u'description': [u'']}>
在這種情況下,有兩種截然不同的,非空字符串,它寫在顯示正確的值將上面的POST放入db中的每個字段中。
這裏是模板: – 2011-01-11 03:24:26