django数据存入mysql数据库,Django:将表单数据保存到数据库

I'm using a form in my Django project to get people's name and number for later contact. Followed several guides including the Django docs but it doesn't seem to work. My test POST doesn't appear in admin and it can't be accessed via the manage.py shell either. I left in the multi-line comment in my code to show another method I was trying just in case. Getting no errors thrown in my manage.py runserver logs either.

Form:

from django import forms

class SubscribeForm(forms.Form):

name = forms.CharField(label='Your Name', max_length=100)

phone_number = forms.CharField(label='Phone Number', max_length=12, min_length=10)

Template:

{% csrf_token %}

{{ form }}

View:

from django.http import HttpResponse, HttpResponseRedirect

from django.shortcuts import render

from datetime import datetime

from .models import Person

from .forms import SubscribeForm

def home(request):

# if this is a POST request we need to process the form data

if request.method == 'POST':

# create a form instance and populate it with data from the request:

form = SubscribeForm(request.POST)

# check whether it's valid:

if form.is_valid():

# process the data in form.cleaned_data as required

p = form.save()

'''

name = form.cleaned_data['name']

number = form.cleaned_date['phone_number']

p = Person(name=name, phone_number=number, date_subscribed=datetime.now(), messages_recieved=0)

p.save()

'''

# redirect to a new URL:

return HttpResponseRedirect('/success/')

# if a GET (or any other method) we'll create a blank form

else:

form = SubscribeForm()

return render(request, 'texting/index.html', {'form': form})

I've watched several videos and read many SO pages, but still doesn't seem to work.

解决方案

Try this:

...

if form.is_valid():

name = form.cleaned_data['name']

number = form.cleaned_data['phone_number']

p = Person(name=name, phone_number=number, date_subscribed=datetime.now(), messages_received=0)

p.save()

...

The form.save() step is unnecessary.

ETA:

You could also try using a ModelForm and some defaults or a custom save method, like so:

class Person(models.Model):

name = models.CharField(max_length=96)

phone_number = models.CharField(max_length=12)

date_subscribed = models.DateTimeField(default=datetime.now())

messages_received = models.IntegerField(default=0)

from django.forms import ModelForm

class SubscribeForm(ModelForm):

class Meta:

model = Person

exclude = ('date_subscribed','messages_received')

If you use a ModelForm, the form.save() is all you'll have to do.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值