如何使用forms.Form到postgres数据库获取表单输入?

时间:2018-03-27 14:51:46

标签: django forms postgresql

这是我的代码:

我的forms.py看起来像:

from django import forms


class SimpleForm(forms.Form):
    website = forms.URLField(required=True,
                             widget=forms.TextInput(
                             attrs={'placeholder': "http://www.example.com"}))
    email = forms.EmailField(required=True,
                            widget=forms.TextInput(
                            attrs={'type': 'email',
                                   'placeholder': "john.doe@example.com"
                                  }))

我的views.py看起来像:

from django.shortcuts import render, redirect
from django.template import loader

from .forms import SimpleForm


def simple_form(request):
    if request.method == 'POST':
        form = SimpleForm(request.POST)

        if form.is_valid():
            website = form.cleaned_data['website']
            email = form.cleaned_data['email']

            return render(request, 'some_page.html')
    else:
        form = SimpleForm()

    return render(request, 'some_other_page.html', {'form': form})

至于我的HTML表单,它如下所示:

<form method="post">
  {% csrf_token %}
  <div class="some-class">
    <label for="website">Enter Your Site:</label>
    <!-- <input type="text" id="website" placeholder="http://www.example.com" name="website" /> -->
    {{ form.website }}
    <label for="email">Enter Your Email:</label>
    <!-- <input type="text" id="email" placeholder="john.doe@example.com" name="website" /> -->
    {{ form.email }}
  </div>
  <div class="some-other-class">
      <div class="another-class">
        <button name="submit">Submit</button>
      </div>
  </div>
</form>

我的问题是,如何将此表单的输入放入postgres数据库中的表中?

1 个答案:

答案 0 :(得分:1)

您可以制作ModelForm而不是表单,然后将表单转换为模型:

class SimpleModel(models.Model):
    website = models.URLField(
        required=True, 
        widget=forms.TextInput(attrs={'placeholder': "http://www.example.com"}))
    email = models.EmailField(
        required=True,
        widget=forms.TextInput(attrs={'type': 'email', 'placeholder': "john.doe@example.com"}))

class SimpleForm(forms.ModelForm):
    class Meta:
        model = SimpleModel
        fields = ['website', 'email']

按照链接查看文档,你可以使它非常抽象,Django可以为你处理大部分事情。

保存后,您可以form.save()看到here

首先通过form.is_valid()

检查表单是明智的

示例视图:

def simple_form(request):
    if request.method == 'POST':
        form = SimpleForm(request.POST)

        if form.is_valid():
            form.save()
            return render(request, 'some_page.html')
    form = SimpleForm()
    return render(request, 'some_other_page.html', {'form': form})

您还可以关注this tutorial以了解Django基础知识 听起来你可以使用基础知识;)