Django/Python:表单数据不';无法存储在数据库中

Django/Python:表单数据不';无法存储在数据库中,python,django,django-forms,Python,Django,Django Forms,Django 1.8/Python 3.4 我想通过名为“add”的Django视图将html表单中的数据添加到我的数据库中。然而,由于某种原因,这种情况并没有发生,我也不知道出了什么问题。可能错误在视图的代码中,但我到底需要更改什么 models.py from django.db import models from model_utils import Choices class Entry(models.Model): user = models.CharField(max_l

Django 1.8/Python 3.4

我想通过名为“add”的Django视图将html表单中的数据添加到我的数据库中。然而,由于某种原因,这种情况并没有发生,我也不知道出了什么问题。可能错误在视图的代码中,但我到底需要更改什么

models.py

from django.db import models
from model_utils import Choices

class Entry(models.Model):
    user = models.CharField(max_length=50)
    title = models.CharField(max_length=200)
    description = models.TextField()
    due_date = models.DateField('Date')
    due_time = models.TimeField('Time')
    STATUS = Choices('Open', 'Done')
    status = models.CharField(choices=STATUS, default=STATUS.Open, max_length=4)

def __unicode__(self):
    return u"%s %s %s %s %s" % (self.user, self.title, self.description, self.expiry, self.status)

def expiry(self):
    return u"%s %s" % (self.due_date, self.due_time)
我的add.html的有趣部分

    <td><input type="text" name="title"></td>
    <td><input type="text" name="description"></td>
    <td><input type="text" name="due_date"></td>
    <td><input type="text" name="due_time"></td>
    <td>
        <select name="status" size="1" selected value="Open">
            <option>Open</option>
            <option>Done</option>
        </select>
    </td>
以及my views.py中的相关视图

from django import forms
from django.shortcuts import render
from django.shortcuts import redirect
from website.list.forms import EntryForm

def add(request):
    if request.method == "POST":
        form = EntryForm(request.POST) 
        if form.is_valid():
            new_entry = form.save()
            new_entry.save()
            return redirect('website')
    else:
        form = EntryForm() 
    return render(request,'add.html', {'form': form})
感谢您的帮助


[编辑]

这就是我的add.html现在的样子:

<form action="." method="post">
{% csrf_token %}
{{ form }}
    <br><input type="submit" value="Send"/>
    <br><br><a href="{% url 'overview' %}">Cancel</a>
</form>

我猜你在这里犯了一个错误
form=EntryForm(request.POST)
但是由于您是手动编写表单html而不是使用Django表单来编写表单,因此您没有看到错误

是如何使用Django为Django表单呈现html;默认情况下,这将显示尝试验证数据时发生的任何错误。

解决了它。。。 这就是forms.py的外观,以便save()函数在视图中工作:

class EntryForm(forms.ModelForm):
CHOICES = (
    ('1', 'Open'),
    ('2', 'Done'),
)
title = forms.CharField(max_length=200)
description = forms.CharField(widget=forms.Textarea)
due_date = forms.DateField()
due_time = forms.TimeField()
status = forms.ChoiceField(choices=CHOICES)

class Meta:
    model = Entry
    fields = '__all__'

重要的是要注意“ModelForm”,而不仅仅是“Form”和类元信息。

我想你是对的,因为重定向也没有发生。所以在到达save()到数据库之前可能出了什么问题?!我将通读你链接的页面…请看一下我在开始文章中的编辑:现在给我以下错误消息。。。“AttributeError at/add/'EntryForm'对象没有属性'save'”哦,您可能希望使用
forms.ModelForm
而不仅仅是
forms.Form
。后者没有与之关联的save方法。是的,的确如此。请看下面我的答案。
from django import forms
from django.shortcuts import render
from django.shortcuts import redirect
from www.todolist.forms import EntryForm
from django.contrib.auth.models import User

def add(request):
    if request.method == "POST":
        form = EntryForm(request.POST) 
        if form.is_valid())
            form.save()
            return redirect('website')
    else:
        form = EntryForm() 
    return render(request,'add.html', {'form': form})
class EntryForm(forms.ModelForm):
CHOICES = (
    ('1', 'Open'),
    ('2', 'Done'),
)
title = forms.CharField(max_length=200)
description = forms.CharField(widget=forms.Textarea)
due_date = forms.DateField()
due_time = forms.TimeField()
status = forms.ChoiceField(choices=CHOICES)

class Meta:
    model = Entry
    fields = '__all__'