【问题标题】:Issue Accessing DateTime Value (Unicode object has no attribute 'strftime')访问 DateTime 值的问题(Unicode 对象没有属性“strftime”)
【发布时间】:2016-05-11 12:29:39
【问题描述】:

我有一个经过 AJAX 处理的视图,它需要几条信息,其中两条是 unicode 日期时间值。

但是,当我尝试直接从对象访问日期时间值(开始/结束)时,它似乎仍然是 unicode。

我认为保存转换为日期时间?

lid = int(postdata['lid'])
location = Group.objects.get(id=lid)
pgid = int(postdata['pgid'])
program = Group.objects.get(id=pgid)
start = postdata['start']
end = postdata['end']
eid = int(postdata['eid'])
creator = Employee.objects.get(id=eid)
description = postdata['description']

shift = ReliefShift()
shift.start = start
shift.end = end
shift.creator = creator
shift.description = description
shift.location = location
shift.program = program
shift.save()

alertModule = 'Relief Shifts Available'
alertMessage = 'A new relief shift has been posted for {0} from {1} to {2}. Visit the <a href="/staff/program/open-relief-shifts/">Relief Shifts page</a> for more details and to sign up.'.format(shift.location, shift.start.strftime('%b %d @ %I:%M%p'), shift.end.strftime('%b %d @ %I:%M%p'))

【问题讨论】:

  • 你从哪里得到postdata

标签: django datetime django-views


【解决方案1】:

调用shift.save() 会将日期时间保存到数据库中,但不会更新shift。您可以在保存后从数据库中重新加载 shift 对象,方法是调用 refresh_from_db

shift.start = <unicode string>
shift.save()
# At this point, shift.start will still be a string
shift.refresh_from_db()

# refresh_from_db is new in Django 1.8. In early versions you would do:
shift = Shift.objects.get(pk=shift.pk)

直接从帖子数据中读取值不是一个好习惯。最好使用formmodel form。 Django 将负责将值转换为日期时间对象,您将能够从form.cleaned_data 访问日期时间,如果您使用模型表单,则可以从实例访问。

【讨论】:

  • 是的,就是这样。 refresh_from_db() 就是答案。不过有趣的是,我尝试了 shift = Shift.objects.get(pk=shift.pk) 并没有更新。
  • 如果refresh_from_db 可以,使用shift = Shift.objects.get(pk=shift.pk) 应该可以工作。也许你做了Shift.objects.get(pk=shift.pk),但没有将结果分配给shift。只要您的主键是id,使用id 代替pk 不会有任何区别。
  • 是pk有关系吗?我用了身份证。
  • 如果是modelform,为什么不直接做x = shift.save()然后得到x.start
  • @trpt4him 这就是为什么我建议在我的回答中使用模型表单。如果表单有效,您将调用shift = form.save(),然后shift.start 将是一个日期时间。
猜你喜欢
  • 2021-01-18
  • 2015-11-09
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多