2017-06-08 5 views
1

Ich fühle mich sehr dumm und verwirrt, dieses Problem so lange anzugehen. Es funktioniert ganz gut, zeigt Umfrage fein, aber es speichert nicht gespeichertes Formular in meiner Datenbank. Ich habe viele Fragen/Lösungen gesehen, aber keiner von ihnen hat mir geholfen.Django 1.10 Formular speichert keine Daten in DB

Hier sind meine models.py

from __future__ import unicode_literals 
from django.db import models 
#from multiselectfield import MultiSelectField, 
from django.contrib.auth.models import User 
#from django.forms import ModelForm 
# Create your models here. 

    class user_prefs(models.Model): 
      cuisine_choice = (
       ('1', 'Italian'), 
       ('2', 'American'), 
       ('3', 'Japanese'), 
       ('4', 'French'), 
       ('5', 'Mexican'), 
       ('6', 'Chinese'), 
       ('7', 'Indian'), 
       ('8', 'Middle Eastern') 
      ) 
      lunch_pref = (
       ('1', 'Coffeehouse'), 
       ('2', 'Cafe'), 
       ('3', 'Restaurant'), 
       ('4', 'Fast Food'), 
       ('5', 'Takeaway'), 
       ('6', 'Stake House') 
      ) 
      dinner_pref = (
       ('1', 'Restaurant'), 
       ('2', 'Takeaway'), 
       ('3', 'Delivery'), 
       ('4', 'Fast food'), 
       ('5', 'Coffeehouse'), 
       ('6', 'Cafe'), 
       ('7', 'Cooking at home') 
      ) 
      sunday = (
       ('1', 'Cultural activities(Museums, Galleries, Exhibitions etc.)'), 
       ('2', 'Sport activities'), 
       ('3', 'Attending sport events'), 
       ('4', 'Music events'), 
       ('5', 'Hiking'), 
       ('6', 'Going to park') 
      ) 
      friday = (
       ('1', 'Bar'), 
       ('2', 'Nightclub'), 
       ('3', 'Karaoke'), 
       ('4', 'Netflix & chill'), 
       ('5', 'Videogames'), 
       ('6', 'Cinema'), 
       ('7', 'Theater'), 
       ('8', 'Restaurant') 
      ) 
      userID = models.ForeignKey(User) #related_name='User', null=True 
      Cuisine = models.IntegerField(choices=cuisine_choice) 
      Cuisine1 = models.CharField(max_length=30) 
      LunchPref = models.IntegerField(choices=lunch_pref) 
      DinnerPref = models.IntegerField(choices=dinner_pref) 
      Sunday = models.IntegerField(choices=sunday) 
      Friday = models.IntegerField(choices=friday) 

Scheint mir so weit in Ordnung.

hier Modelform (forms.py)

class user_prefsForm(ModelForm): 
    class Meta: 
     model = user_prefs 
     fields = ['Cuisine', 'Cuisine1', 'LunchPref', 'DinnerPref', 'Sunday', 'Friday'] 


form = user_prefsForm() 

hier views.py ist

def display1(request): 
    if not request.user.is_authenticated: 
     return redirect(settings.LOGIN_URL) 
    #form = user_prefsForm(request.POST) 
def display(request): 
    if request.method == 'POST': 
     form = user_prefsForm(request.POST) 
     if form.is_valid(): 
      form.userID = request.user 
      form.save() 
     return HttpResponseRedirect('/') 
    else: 
     form = user_prefsForm() 
     return render(request, 'display.html', {'form': form}) 

Vorlage

Please state your preferences below 
<form action='/' method="POST" > 
    {% csrf_token %} 
    <p>What is you favourite cuisine?</p> 
    {{ form.Cuisine }} 
    <p>If not listed above or you want to add more to that, coud you please tell us? </p> 
    {{ form.Cuisine1 }} 
    <p>What would be your lunch preference ?</p> 
    {{ form.LunchPref }} 
    <p>What would be your Dinner preference ?</p> 
    {{ form.DinnerPref }} 
    <p>What would you do on your Friday free time ?</p> 
    {{ form.Sunday }} 
    <p>What would you do on Sunday?</p> 
    {{ form.Friday }} 
<button type="submit">Submit</button> 
    {% endif %} 
</html> 

Nur für den Fall urls.py (tho ich glaube nicht, es würde jedoch irgendwelche Probleme geben):

urlpatterns = [ 
    url(r'^$', index), 
    url(r'^letusknow/', display, name='display'), 
    url(r'^letusknow/', display1, name='display1'), 
    ] 

Zunächst hatte ich Modelle.CharField in meinen Modellen, die auch nicht funktioniert.

Antwort

1

Ihr Problem besteht darin, dass Sie auf die Homepage umleiten, unabhängig davon, ob das Formular gültig ist oder nicht.

Zusätzlich werden die Felder in Ihrer Vorlage nicht richtig gerendert, einige der Fehler im Formular werden nie angezeigt. Bitte beachten Sie diesen Link: https://docs.djangoproject.com/en/1.11/topics/forms/#rendering-fields-manually

Wenn Sie die Vorlage nicht reparieren, wird der Benutzer nie wissen, dass er das Formular falsch ausgefüllt hat.

+0

also, wenn ich mache sonst: return HttpResponseRedirect ('page.html') würde es funktionieren? – pyjka

+0

Ich verstehe Ihren Kommentar nicht – e4c5

+0

Ich habe Ihnen die richtige Form gezeigt, bitte verwenden Sie es. Und ändern Sie Ihre Vorlage – e4c5