2016-10-24 4 views
0

Ich verwende ein Formular in meinem Django-Projekt, um den Namen und die Nummer der Personen für den späteren Kontakt zu erhalten. Es folgten mehrere Anleitungen, einschließlich der Django-Dokumentation, aber es scheint nicht zu funktionieren. Mein Test POST erscheint nicht im Admin und kann auch nicht über die manage.py Shell erreicht werden. Ich ließ den mehrzeiligen Kommentar in meinem Code, um eine andere Methode zu zeigen, die ich nur für den Fall versuchte. Auch in meinen manage.py runserver-Protokollen werden keine Fehler angezeigt.Django: Formulardaten in Datenbank speichern

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) 

Vorlage:

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

Ausblick:

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

ich mehrere Videos und lesen viele SO Seiten gesehen haben, aber immer noch nicht scheint Arbeit.

+0

Dieser Code würde einen Fehler verursachen, da ein normales Form-Objekt keine Speichermethode hat. Da keine Fehler angezeigt werden, muss Ihr Formular entweder nicht gültig sein oder eine andere Ansicht enthalten. –

+0

@DanielRoseman Danke Daniel, habe das übersehen. Die Aktion meiner Vorlage ist '/ success /', also führt die POST-Methode nur den Code in der Ansicht 'success' aus (was nur ein Text ist, der sagt, dass es funktioniert hat). Wenn ich also meine Templates-Aktion auf '/' ändere (wo ich meinen Code geschrieben habe), wird sie gespeichert. Wenn du es als Antwort schreiben willst, werde ich es akzeptieren. –

Antwort

0

Versuchen Sie folgendes:

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

Der form.save() Schritt nicht erforderlich ist.

ETA:

Sie auch eine Modelform und einige Standardeinstellungen verwenden oder eine benutzerdefinierte Speichermethode versuchen könnte, etwa 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: 
     exclude = ('date_subscribed','messages_received') 

Wenn Sie eine Modelform zu verwenden, ist die form.save() alle Du musst es tun.

+0

Ich ließ das in, weil ich es ausprobiert hatte und es nicht funktioniert hat. –

+1

Vielleicht möchten Sie ein ModelForm erstellen. https://docs.djangoproject.com/de/1.10/topics/forms/modelforms/ – slink

0

p = Person (name = Name, phone_number = Anzahl, date_subscribed = datetime.now(), messages_received = 0)
p.save()

löschen diese beiden Linien hinzufügen als

folgt

import os
os.environ.setdefault ('DJANGO_SETTINGS_MODULE', 'YourProjectName.settings')

import django
django.setup()

Person.objects.get_or_create()

+0

Grund, dass Sie nicht bearbeiten oder Daten aus einer beliebigen Datei hinzufügen können –

Verwandte Themen