首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据未保存在数据库中

数据未保存在数据库中
EN

Stack Overflow用户
提问于 2013-05-02 19:02:46
回答 2查看 356关注 0票数 0

我在views.py中使用了以下代码

代码语言:javascript
运行
复制
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))

我的模板是

代码语言:javascript
运行
复制
{{ 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

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-02 19:58:23

您没有将任何数据应用于表单,因此无法使其有效。

代码语言:javascript
运行
复制
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"inputbutton

代码语言:javascript
运行
复制
<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中编辑和显示它

代码语言:javascript
运行
复制
created_date_time = models.DateTimeField('Created', auto_now_add=True,)
票数 0
EN

Stack Overflow用户

发布于 2013-05-02 19:47:28

在我看来,您没有填写表单中的用户字段。报表模型将user作为非空的外键,因此这可能会给您带来麻烦。您需要显式添加表单未填充的字段,然后保存:

代码语言:javascript
运行
复制
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()

因此,我们使用窗体提供的字段从窗体创建报表对象。由于报告对象仍然不完整,因此我们现在不提交。然后我们添加剩余的字段并保存。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16336402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档