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
Django:表单中的多个日期字段允许空白输入_Django_Django Forms - Fatal编程技术网

Django:表单中的多个日期字段允许空白输入

Django:表单中的多个日期字段允许空白输入,django,django-forms,Django,Django Forms,我在Django中有一个模型,它允许两个日期字段为空: class ReleaseStream(models.Model): name = models.CharField(max_length=200,db_column='name') version = models.CharField(max_length=20,blank=True,db_column='version') target_date = models.DateTimeField(null=True,

我在Django中有一个模型,它允许两个日期字段为空:

class ReleaseStream(models.Model):
    name = models.CharField(max_length=200,db_column='name')
    version = models.CharField(max_length=20,blank=True,db_column='version')
    target_date = models.DateTimeField(null=True,blank=True,db_column='target_date')
    actual_date = models.DateTimeField(null=True,blank=True,db_column='actual_date')
    description = models.TextField(db_column='description')
…和一个表单定义:

class ReleaseStreamForm(ModelForm):

    class Meta:
        model = ReleaseStream
当表单出现时,我可以为target_date而不是实际的_date字段填写一个值,并且当form.save启动时,似乎会将为target_date提供的值写入这两个字段。我已经查看了执行form.save的代码中的post数据,它肯定有一个target_date值和一个actual_date值,所以我不认为表单本身有什么奇怪的地方,post中的变量名等等

现在,如果我为实际_日期提供一个非空值,那么form.save做的事情是正确的——目标_日期和实际_日期都写入了正确的值。我是做错了什么,还是这可能是django中的一个bug

这是下面空白注释的模板:

{% extends "base.html" %}

{% block title %}{{ form_title }}{% endblock %}
{% block subtitle %}{% endblock %}

{% block content %}

    <form action={{ action_url }} method="post">
        <table>
        {{ form.as_table }}
        </table>
        <input type="submit" value="Submit" />
    </form>

{% endblock %}
。。。以及即将发布的post数据:

<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u''], u'description': [u'']}>
您可以看到,它有一个有效的POST变量,即实际日期,并带有一个空字符串。这篇文章将生成一个form.save,用于存储上面为target_date和actual_date提供的字符串

如果我在两个日期运行了一个具有不同值的帖子-以下是帖子:

<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u'2011-07-15 00:00'], u'description': [u'']}>

在本例中,使用两个不同的非空字符串,它将上面帖子中显示的正确值写入db中的每个字段

我不认为这是Django中的bug,否则很久以前就会有人看到这个问题了。你能给我们看一下呈现表单的模板吗?另外,如果您可以显示request.POST的内容,这也会很有用


我猜你的模板代码有点不正确。我唯一能想到的另一个问题是表单中的自定义验证(如果有)。这就是您提供的全部ModelForm定义吗?

我不认为这是Django中的错误,否则很久以前就会有人看到这个问题。你能给我们看一下呈现表单的模板吗?另外,如果您可以显示request.POST的内容,这也会很有用


我猜你的模板代码有点不正确。我唯一能想到的另一个问题是表单中的自定义验证(如果有)。这就是您提供的整个模型表单定义吗?

是的,模型表单在上面已经完成了-我刚刚尝试了从模型自动生成的默认表单。为了回答最后一个关于自定义验证的问题,不,我还没有实现任何特殊的功能。我试图让基本的工作流程变得可靠,但却遇到了这种奇怪的行为。@Ed抱歉,伙计,我不知所措。你所做的一切看起来都不寻常。它可能是Django中的一个bug,但有些东西仍然告诉我它不可能是。您是否尝试过以与命令行shell中的视图类似的方式创建表单?manage.py shell。通过不同的口述,看看结果是什么。尝试用一个只有两个日期字段的模型来复制这种行为。如果您能以这种方式复制,那么向Django提交一份bug报告就可以了。因为我遇到了类似的问题,所以发生了什么。我的一个日期字段上有blank=True,null=True,但django坚持要求我输入一个值。奇怪的在搜索之后,我发现您应该在forms.py文件中使用类似于birth_date=forms.DateFieldrequired=False的东西来阻止django一直要求它是的,上面的模型表单已经完成了-我只是尝试从模型中自动生成默认表单。要回答关于自定义验证的最后一个问题,否,我还没有实现任何特殊的功能。我试图让基本的工作流程变得可靠,但却遇到了这种奇怪的行为。@Ed抱歉,伙计,我不知所措。你所做的一切看起来都不寻常。它可能是Django中的一个bug,但有些东西仍然告诉我它不可能是。您是否尝试过以与命令行shell中的视图类似的方式创建表单?manage.py shell。通过不同的口述,看看结果是什么。尝试用一个只有两个日期字段的模型来复制这种行为。如果您能以这种方式复制,那么向Django提交一份bug报告就可以了。因为我遇到了类似的问题,所以发生了什么。我的一个日期字段上有blank=True,null=True,但django坚持要求我输入一个值。奇怪的在搜索之后,我发现您应该在forms.py文件中使用类似于birth_date=forms.DateFieldrequired=False的东西来阻止django一直要求它
<QueryDict: {u'name': [u'NewRelease'], u'target_date': [u'2011-06-15 00:00'], u'version': [u'4.5.1'], u'actual_date': [u'2011-07-15 00:00'], u'description': [u'']}>