【问题标题】:Django save data from individual form elements (text boxes)Django 保存来自单个表单元素(文本框)的数据
【发布时间】:2014-02-25 19:32:28
【问题描述】:

我有一个简单的表单,其中包含用户名和消息。单击提交按钮后,我希望将用户和消息的数据分别存储到数据库中。但是,我无法弄清楚我应该在我的“index.html”模板中的哪个位置包含“用户”和“消息”。现在我在 m.save() 上收到 IntegrityError。

 "Exception Value: SimpleMessage_message.content may not be NULL"

型号

class User (models.Model):
    name = models.CharField(max_length=20)

    def __unicode__(self):              
        return self.name

class Message (models.Model):
    content = models.TextField(max_length=140)
    user = models.ForeignKey(User)
    time = models.DateTimeField()

    def __unicode__(self):              
        return self.content

views.py

def index (request):
    if request.method == 'POST':
    u = User(name=request.POST.get('user'))
    m = Message(content=request.POST.get('text'), user = u)
        u.save()
        m.save()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))
    else:
        u = User()
        m = Message()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request)

)

index.html

<form action="{% url 'index' %}" method = "post">
{% csrf_token %}
<input type="text" name="user" id="user" maxlength="20" placeholder = "Username">
<br>
<br>
<textarea rows="4" cols="35" name="text" maxlength="140" placeholder = "Message goes here"></textarea><br>
<input type="submit" value="Submit">
</form>

【问题讨论】:

  • 查看生成的 HTML 时,是否看到了 CSRF 令牌。
  • CSRF 令牌会是什么样子?我看到了用户名和消息的两个文本框,以及提交按钮。
  • 这将是一个类似&lt;input type="hidden" value="123"&gt;的标签。
  • 不,我没有看到
  • 您是否没有注意到错误消息为您提供了有关如何解决问题的详细说明?

标签: python html django post


【解决方案1】:

如果您收到错误 CSRF token missing or incorrect.,并且在 HTML 源代码中看不到 CSRF 令牌,则应确保您使用的是 RequestContext

from django.template import RequestContext

...

return render_to_response('index.html', {
            'user': u,
            'message': m,
            }, RequestContext(request))

这将使{% csrf_token %} 标记可用于您的模板,如果有效,您应该在HTML 源代码中看到&lt;input type="hidden" name="csrfmiddlewaretoken" value="somevaluehere"/&gt;

(乍一看,您的代码的其余部分应该按预期工作,创建用户和消息条目)

【讨论】:

  • 现在我在 m.save() 上收到 IntegrityError。 “异常值:SimpleMessage_message.content 不能为 NULL”
  • @user1530318 您可能应该考虑使用Django forms 而不是原始输入 HTML 字段
  • 我尝试使用表单,但由于某种原因,我无法将表单数据保存到相应的模型中......
  • 是否可以将表单中的响应转发回原始用户和消息模型?
  • @user1530318 我无法在 cmets 中真正回答所有这些问题;也许问一个新问题,或者在这里查看答案stackoverflow.com/questions/11512972/django-2-models-1-form - 这是处理这种情况的正确方法。
猜你喜欢
  • 1970-01-01
  • 2015-11-21
  • 2017-09-27
  • 1970-01-01
  • 2014-03-27
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多