从按钮上的表单获取数据单击并在Django中保存到Db

时间:2014-12-23 12:22:13

标签: jquery python django sqlite

我刚开始学习Django,我有一个页面宽度表单,用于从用户输入数据并将其保存到数据库。我在Google上搜索过,但大多数都使用某种内置模块或类似的东西。

我创建了一个模型

class Message(models.Model):
    MessageID = models.AutoField(verbose_name='Message ID',primary_key=True)
    MessageSubject = models.CharField(verbose_name='Subject',max_length=255)
    MessageContent = models.TextField(verbose_name='Content',)

和查看页面。

{% extends "base.html" %}

{% block Content %}

<div class="container">
  <!-- Contacts -->
  <div id="contacts">
    <div class="row">
      <!-- Alignment -->
      <div class="col-sm-offset-3 col-sm-4">
        <!-- Form itself -->
        <form name="sentMessage" class="well" id="contactForm"  novalidate>
          <legend>Send Messages</legend>
          <div class="control-group">
            <div class="controls">
              <input type="text" class="form-control"
              placeholder="Subject" id="name" required
              data-validation-required-message="Please enter subject" />
              <p class="help-block"></p>
            </div>
          </div>


          <div class="control-group">
            <div class="controls">
              <textarea rows="10" cols="100" class="form-control"
              placeholder="Message" id="message" required
              data-validation-required-message="Please enter your message" minlength="5"
              data-validation-minlength-message="Min 5 characters"
              maxlength="999" style="resize:none"></textarea>
            </div>
          </div>
          <div class="radio">
            <label>
              <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked>
              Send Sms to Selected Users
            </label>
          </div>
          <div class="radio">
            <label>
              <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2">
              Send Email To Selected Users
            </label>
          </div>
          <div id="success"> </div>
          <button type="submit" class="btn btn-primary btn-sm pull-right">Send</button><br />
        </form>
      </div>
    </div>
  </div>
</div>



{% endblock %}

我希望当用户将数据输入表单并单击“发送”按钮时,数据将存储在数据库表中。我正在使用sqlite数据库。

3 个答案:

答案 0 :(得分:2)

您是否已阅读Django文档中的第一步的6个部分?如果您这样做,您可能会在&#34;编写您的第一个Django应用程序,第4部分和第34部分中找到类似的内容。 views.py中的vote函数只读取用户的输入数据并将其保存到数据库中。

顺便说一句,我发现你的代码已经出错了。

<form name="sentMessage" class="well" id="contactForm"  novalidate>

您没有为action代码提供<form> attr,因此表单中的数据无法提交。

答案 1 :(得分:0)

如何创建view.page?你的view.py,[forms.py] ??

例如,

1)我的模型CreateAccount https://github.com/evgenyivanov/form/blob/master/testingform/models.py

模板中的

<form action="/test/" method="post" id="form">
{{form.as_p}}
 <br />
 <input id="submit" type="hidden" value="Send">
 </form>
在url.py中

   url(r'^test/', 'testingform.views.test', name='test')

在view.py

   def test(request):
      if request.method == 'POST':
          form = CreateAccountForm(request.POST)
          if form.is_valid():
              return HttpResponse('OK')
      else:
            return HttpResponse(json.dumps(form.errors))

在form.py

  class CreateAccountForm(ModelForm):
    class Meta:
    model = CreateAccount

有关使用表单的更多信息:http://www.pythoncentral.io/using-python-django-modelform-first-django-application/

答案 2 :(得分:0)

你不应该自己创建一个HTML表单,让Django这样做 首先在您的应用中创建一个forms.py文件:

class MessageForm(forms.ModelForm):
    class Meta:
        model = Message
        fields = "__all__"

然后你的模板可能是这样的:

{% extends "base.html" %}
{% load staticfiles %}

{% block content %}

<form method="POST">
    {% csrf_token %}
    {{ form }}
    <button type="submit" value="submit">Submit</button>
</form>

{% endblock content %}

观点:

def message(request, message_id):
    message = get_object_or_404(Message, pk=int(message_id))
    if request.method == 'POST':
        form = MessageForm(request.POST, instance=message)
        if form.is_valid():
            form.save()
            return redirect("message_list")
    else:
        form = MessageForm(instance=message)
    context = {
        "form": form,
    }
    return render(request, 'message.html', context)