Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.10表格不';t将数据存储到数据库_Python_Django_Django Models_Django Forms - Fatal编程技术网

Python Django 1.10表格不';t将数据存储到数据库

Python Django 1.10表格不';t将数据存储到数据库,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我觉得很愚蠢和困惑,处理这个问题这么久。 它工作完全正常,显示调查结果正常,但它不会将提交的表单存储(保存)到我的数据库中。我看到了大量的问题/解决方案,但没有一个对我有帮助 这是我的模特 from __future__ import unicode_literals from django.db import models #from multiselectfield import MultiSelectField, from django.contrib.auth.models import

我觉得很愚蠢和困惑,处理这个问题这么久。 它工作完全正常,显示调查结果正常,但它不会将提交的表单存储(保存)到我的数据库中。我看到了大量的问题/解决方案,但没有一个对我有帮助

这是我的模特

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)
到目前为止我觉得还不错

这是ModelForm(forms.py)

这里是views.py

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

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>

最初,我的模型中有models.CharField,这也不起作用。

您的问题是,无论表单是否有效,您都将重定向到主页

def display(request):
    if request.method == 'POST':
        form = user_prefsForm(request.POST)
        if form.is_valid():
            form.userID = request.user
            form.save()
            # note indentation change here.
            return HttpResponseRedirect('/')
    else:
        form = user_prefsForm()
    # note identation change here.
    return render(request, 'display.html', {'form': form})
此外,如果在模板中未正确呈现字段,则表单中的某些错误将永远不会显示。请参阅此链接:


除非您修复模板,否则用户将永远不会知道他填写的表单不正确。

因此,如果我这样做:返回HttpResponseRedirect('page.html'),它会工作吗?我不理解您的评论,我已向您展示了正确的表单,请使用它。改变你的模板哦,我明白了,缩进。。我现在就去试试!但这本身无法修复它,您也必须修复模板
urlpatterns = [
    url(r'^$', index),
    url(r'^letusknow/', display, name='display'),
    url(r'^letusknow/', display1, name='display1'),
    ]
def display(request):
    if request.method == 'POST':
        form = user_prefsForm(request.POST)
        if form.is_valid():
            form.userID = request.user
            form.save()
            # note indentation change here.
            return HttpResponseRedirect('/')
    else:
        form = user_prefsForm()
    # note identation change here.
    return render(request, 'display.html', {'form': form})