我在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”的值和'for for“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中的每个字段。
答案 0 :(得分:0)
我不相信它是Django中的一个错误,或者很久以前有人会看到这个问题。你能告诉我们呈现表格的模板吗?此外,如果您可以显示request.POST的内容,那也很有用。
我猜你的模板代码不正确。我能想到的唯一其他问题是表单中的自定义验证(如果有的话)。这是你提供的整个ModelForm定义吗?