我在Django里面这样做。 DateTime字符串成功传递给POST。这是我的代码:
vk = Vk()
day1 = request.POST['day1']
vk.day1 = datetime.datetime.strptime(day1, '%m/%d/%Y %I:%M %p')
vk.save()
这是POST信息的格式:
'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文件中看到它是None:
{% 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}
)
答案 0 :(得分:2)
为什么不使用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}
)
是的,你写了更多的代码,但是:
这被认为是一种不好的做法:
{% for vk in vk %}
{{ vk.day1 }}
{% endfor %}
虽然这在Django模板引擎中有效,但却非常混乱。如果您在Python中编写相同内容,vk
将被覆盖。每当您处理项目列表时,请将_list
附加到变量名称,例如:object_list
或vk_list
,以区分单个对象和列表。
为了更好地调试代码,我建议使用pip install 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()
运行本地开发服务器,执行POST请求并检查终端。检查request.POST['day1']
是否真的与您预期的一样,以及是否在day
属性上设置了日期时间实例。