Django表单无效()失败

Django表单无效()失败,django,forms,post,Django,Forms,Post,我是一个真正的网络开发初学者。以下代码在检查是否有效()时失败。但我不明白为什么:表格是否应该从POST数据中填写数据 型号: class Statement(models.Model): text = models.CharField(max_length=255) user = models.ForeignKey(User) time = models.DateField() views = models.IntegerField() 模型形式: class

我是一个真正的网络开发初学者。以下代码在检查
是否有效()时失败。但我不明白为什么:表格是否应该从POST数据中填写数据

型号:

class Statement(models.Model):
    text = models.CharField(max_length=255)
    user = models.ForeignKey(User)
    time = models.DateField()
    views = models.IntegerField()
模型形式:

class StatementForm(ModelForm):
    class Meta: 
        model = Statement
        widgets = {
                   'time':forms.HiddenInput(),
                   'user':forms.HiddenInput(), 
                   'views':forms.HiddenInput(), 
        }
查看功能:

def new(request):  
    if request.method == 'POST': # If the form has been submitted...
        form = StatementForm(request.POST) # A form bound to the POST data
        if form.is_valid():
            stmt = form.save()
            path = 'stmt/' + stmt.id
            return render_to_response(path, {'stmt': stmt})
    else:  
        c = {}
        c.update(csrf(request))
        loggedin_user = request.user 
        d = datetime.now()
        form = StatementForm(request.POST, initial={'time': d.strftime("%Y-%m-%d %H:%M:%S"), 'user':loggedin_user, 'views':0})
        return render_to_response('new_stmt.html', {'form': form, },context_instance=RequestContext(request))
我找到了类似的话题,并尝试了很多。这就是我认为它应该如何工作。我真的需要建议。

更改此行:

    form = StatementForm(request.POST, initial={'time': d.strftime("%Y-%m-%d %H:%M:%S"), 'user':loggedin_user, 'views':0})
为此:

    form = StatementForm(initial={'time': d.strftime("%Y-%m-%d %H:%M:%S"), 'user':loggedin_user, 'views':0})

模型的所有字段都是必需的。因此,
form.is\u valid()。
您已将字段
时间
用户
视图
声明为隐藏字段。你确定你已经在模板表格中填写了它们吗? 此外,您可能需要自动标记字段
time=models.DateField()
。修改模型字段,如

time = models.DateField(auto_now=True)`. 
在此之后,您不必自己填写模板表单

视图在所有情况下都必须返回HttpResponse对象。如果表单无效,即如果
form.is\u valid()
将返回False,则视图不会返回任何
HttpResponse
对象。这可能是你失败的原因。为
if form.is\u valid()添加
else
语句:


谢谢,这帮了我的忙。等等,这两者有什么区别?我的意思是,我可以看到请求。帖子不见了。。。但是这有什么帮助呢?要回答@bharal-
new()
方法有一个条件。它以
if request.method==“POST”:处理数据…
开始,然后有一个
else
(如果该方法不是
POST
,即如果它是
GET
)。如果它不是
POST
方法,那么为什么要包含
request.POST
(在
else
之后,这里不存在该方法)?谢谢,这显然是对我的代码的改进。对于我的数据库,我需要以下格式的日期:d.strftime(“%Y-%m-%d%H:%m:%S”)。有没有可能在模型中初始化像我这样的特殊格式的日期?当
auto\u now
用于
DateField
时,带有当前日期的
datetime.date
对象作为值传递。当您需要阅读
日期字段时,您可以选择您喜欢的任何格式。另外,据我所知,
DateField
将只存储日期,即仅此部分
%Y-%m-%d
。如果需要存储日期和时间,则应使用
DateTimeField
。看一看,然后转到前面你问过的问题,并接受一个特定问题的最佳答案(如果这是一个)。您可以通过在答案旁边打勾来实现这一点。
from django.http import Http404
def new(request):  
    if request.method == 'POST': # If the form has been submitted...
        form = StatementForm(request.POST) # A form bound to the POST data
        if form.is_valid():
            stmt = form.save()
            path = 'stmt/' + stmt.id
            return render_to_response(path, {'stmt': stmt})
        else:
            # Do something in case if form is not valid
            raise Http404 
    else: 
        # Your code without changes