我在views.py中使用了以下代码
def when(request):
log.debug("test....")
reportform = ReportForm()
if request.method == 'POST':
if reportform.is_valid():
log.debug("test:%s",reportform)
reportform = reportform.save()
return render_to_response('incident/when.html',{'newreport_menu': True,
'form': reportform },context_instance=RequestContext(request))我的模板是
{{ form.manual_date_time }}
<p id=ir-nextbutn><a href="{% url incident.views.media %}">
<form action="/member/media/" method="POST"> {% csrf_token %}
{% include "buttons/next.html" %}
</form>models.py
class Report(models.Model):
user = models.ForeignKey(User, null=False)
incident_number = models.CharField('Incident Number', max_length=100)
device_id = models.CharField('Device Id', max_length=100)
app_uuid = models.CharField('Unique App Id', max_length=100)
created_date_time = models.DateTimeField('Created')
manual_date_time = models.DateTimeField('Another time', null=True, blank=True)
sent_date_time = models.DateTimeField('Sent')
incident_description = models.TextField('Incident description', null=True, blank=True)这里我将date time字段保存在database.After中,并在字段中输入时间和日期。如果用户单击next按钮save并转到next page.But,则不会存储数据。我使用的是MySql db。
发布于 2013-05-02 19:58:23
您没有将任何数据应用于表单,因此无法使其有效。
def when(request):
if request.method == 'POST':
# Form with POST'ed data
reportform = ReportForm(
data=request.POST,
)
if reportform.is_valid():
log.debug("test:%s",reportform)
reportform = reportform.save()
# You should redirect to a different page at this point
# This will avoid double POST'ing and saving
redirect_to = request.POST.get(
'next',
reverse('name-of-url-defined-in-your-urls.py')
)
return HttpResponseRedirect(redirect_to)
else:
# Check the errors, they *should* appear when the form is rendered
pass
else:
# Blank form, no data
reportform = ReportForm()
return render_to_response(
'incident/when.html',
{
'newreport_menu': True,
'form': reportform,
},
context_instance=RequestContext(request)
)更新:
此外,您的表单不包含在form标记中。而且你的“下一步”按钮需要是一个带有type="submit"的input或button
<form action="/member/media/" method="POST"> {% csrf_token %}
<input name="next" type="hidden" value="{{ url_to_redirect_to }}"/>
{{ form }}
<input type="submit" name="save" value="save"/>
OR
<button type="submit">Save</button>
</form>旁注:
您可能会将auto_now_add=True添加到created_date_time中,以避免必须自己设置它,还可以停止在ModelForm中编辑和显示它
created_date_time = models.DateTimeField('Created', auto_now_add=True,)发布于 2013-05-02 19:47:28
在我看来,您没有填写表单中的用户字段。报表模型将user作为非空的外键,因此这可能会给您带来麻烦。您需要显式添加表单未填充的字段,然后保存:
if reportform.is_valid():
log.debug("test:%s",reportform)
report = reportform.save(commit=False)
report.user = request.user #assuming a login_required decorator
report.incident_number = ...
....
report.save()因此,我们使用窗体提供的字段从窗体创建报表对象。由于报告对象仍然不完整,因此我们现在不提交。然后我们添加剩余的字段并保存。
https://stackoverflow.com/questions/16336402
复制相似问题