DateTime对象为none——Python
我在Django里面做这件事。DateTime字符串已成功传递到POST。这是我的代码: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
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的其他属性(不相关)。谢谢,我想这会让我省去很多麻烦。我会这么做的。