Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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
DateTime对象为none——Python_Python_Django_Datetime - Fatal编程技术网

DateTime对象为none——Python

DateTime对象为none——Python,python,django,datetime,Python,Django,Datetime,我在Django里面做这件事。DateTime字符串已成功传递到POST。这是我的代码: vk = Vk() day1 = request.POST['day1'] vk.day1 = datetime.datetime.strptime(day1, '%m/%d/%Y %I:%M %p') vk.save() 这是帖子信息的格式: 'day1': 'MM/DD/YYYY HH:MM AM/PM' # AM/PM meaning either AM or PM 问题是vk实例上的DateTi

我在Django里面做这件事。DateTime字符串已成功传递到POST。这是我的代码:

vk = Vk()
day1 = request.POST['day1']
vk.day1 = datetime.datetime.strptime(day1, '%m/%d/%Y %I:%M %p')
vk.save()
这是帖子信息的格式:

'day1': 'MM/DD/YYYY HH:MM AM/PM' # AM/PM meaning either AM or PM
问题是vk实例上的
DateTimeField
None

class Vk(models.Model):
    day1 = models.DateTimeField(null=True, blank=True)
我看到它在我的HTML文件中没有:

{% for vk in vk %}
{{ vk.day1 }}
{% endfor %}
这等于零

这是负责呈现模板的视图:

def list_verkefni(request):
    vk = Vk.objects.all()
    vm = Vm.objects.all()

    return render(request, 'list_verkefni.html', 
    {'vk': vk, 'vm': vm}
    )

为什么不使用ModelForm呢

someapp/forms.py:

class VkForm(forms.ModelForm):
    class Meta:
        model = Vk
        fields = ('day1', )

    def __init__(self, *args, **kwargs):
        super(VkForm, self).__init__(*args, **kwargs)
        self.fields['day1'].input_formats = ['%m/%d/%Y %I:%M %p', ]
someapp/views.py:

def myview(request):
    form = VkForm(request.POST or None)
    if request.method == "POST" and form.is_valid():
        obj = form.save()
        return HttpResponseRedirect('/somewhere/')
    return render(
        request, 'template.html',
        {'form': form}
    )
是的,您可以编写更多的代码,但是:

  • 您可以通过漂亮的错误消息获得完整的验证
  • 将来无论何时扩展模型,都不需要重写代码,只需将字段名添加到ModelForm中即可
  • 您不需要对Python数据类型进行低级转换
这被认为是一种不好的做法:

{% for vk in vk %}
{{ vk.day1 }}
{% endfor %}
虽然这可以在Django模板引擎中工作,但它非常混乱。如果用Python编写相同的代码,
vk
将被覆盖。每当您使用项目列表时,请将
\u list
附加到变量名称,例如:
对象列表
vk\u列表
,以区分单个对象和列表

为了更好地调试代码,我建议pip安装pudb并执行以下操作:

vk = Vk()
day1 = request.POST['day1']
import pudb; pudb.set_trace()
vk.day1 = datetime.datetime.strptime(day1, '%m/%d/%Y %I:%M %p')
vk.save()

运行本地dev服务器,执行POST请求并检查终端。检查
request.POST['day1']
是否真的是您所期望的,以及datetime实例是否在您的
day
atribute设置。

更新了原始postThank。如何检查
day1
的值是否保存为
None
?再次更新OP。我相信模板,但我会检查控制台以防万一,那么传递给模板的
Vk
变量是什么?您能显示负责呈现模板的视图吗?已更新,但我可以确认该视图工作正常,因为它正确显示了Vk的其他属性(不相关)。谢谢,我想这会让我省去很多麻烦。我会这么做的。