2016-10-24 3 views
0

私はDjangoプロジェクトで、後で連絡できるように人の名前と番号を取得するためのフォームを使用しています。 Djangoのドキュメントを含むいくつかのガイドラインに従っていますが、動作しないようです。私のテストPOSTはadminには表示されず、manage.pyシェルでもアクセスできません。私は、コード内に複数行のコメントを残して、私がちょうど試みた別の方法を示しました。私のmanage.py runserverログにもエラーがスローされません。Django:フォームデータをデータベースに保存する

フォーム:

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) 

テンプレート:

<form action="/success/" method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

ビュー:

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}) 

私はいくつかのビデオを見て、ページのように多くのを読んで、まだしていないようですしました作業。ステップは不要です)(

... 
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() 
... 

form.save:

+0

このコードは、通常のFormオブジェクトには保存メソッドがないため、エラーが発生します。エラーが表示されないため、フォームが有効でないか、別のビューに送信している必要があります。 –

+0

@DanielRosemanダニエルありがとう、それを見落とした。私のテンプレートのアクションは '/ success /'なので、POSTメソッドはビュー 'success'(これはそれが働いているというテキストだけです)でコードを実行しています。だから私のテンプレートアクションを '/'(これは私が自分のコードを書いたところ)に変更すると保存されます。あなたが答えとしてそれを書いたければ、私はそれを受け入れるでしょう。 –

答えて

0

はこれを試してみてください。

ETA:

ます。また、そうのように、のModelFormといくつかのデフォルトまたは保存方法カスタムを使用して試みることができる:あなたはのModelForm、form.saveを(使用している場合

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: 
     exclude = ('date_subscribed','messages_received') 

)がすべてですあなたはする必要があります。

+0

私はそれを試して、それが動作しなかったので、それを残しました。 –

+1

ModelFormの作成を参照してください。 https://docs.djangoproject.com/en/1.10/topics/forms/modelforms/ – slink

0

(= 0 messages_received名=名、PHONE_NUMBER =番号、date_subscribed = datetime.now())P =人
p.save()

次のように2行 が追加、削除

インポートOS
os.environ.setdefault( 'DJANGO_SETTINGS_MODULE'、 'YourProjectName.settings')

インポートジャンゴ
django.setup()

Person.objects.get_or_create()

+0

あなたが望む任意のファイルからデータを編集したり追加することができない理由 –

関連する問題