在我的表单中,我有一个名为booking_date的DateField,它使用AdminDateWidget呈现。 booking_date字段的内容需要国际化。当我想在这样的事情中使用字段的值时出现问题:
booking = Booking.objects.get(booking_number='BN34D', booking_date='2010-11-21')
但如果我的日期格式为'%d。%m。%Y':
booking = Booking.objects.get(booking_number='BN34D', booking_date='21.11.2010')
我收到'ValidationError:输入YYYY-MM-DD格式的有效日期'
无论使用何种日期格式,我如何进行查询?
答案 0 :(得分:4)
您应首先使用strftime格式的本地化版本解析它。
from datetime import datetime
d = datetime.strptime('...')
booking.objects.get(..., booking_date=d.date())
在strptime
:
http://linux.die.net/man/3/strftime
您不应该依赖直接从用户传递到查询中。
看起来你应该从你的具体例子中做到以下几点:
d = datetime.strptime('%d.%m.%Y')
booking = Booking.objects.get(booking_nmber='BN34D', booking_date=d)
答案 1 :(得分:1)
据我了解您的问题,您事先并不确定将使用哪种语言环境。这可能会让你陷入无法解决的问题。 (“10-11-12”可能是2012年10月11日或2010年11月12日或......)
因此,您必须拥有一组有限的,可区分的可能格式。然后你可以这样做:
POSSIBLE_FORMATS = ('%d.%m.%Y', '%Y-%m-%d', '...')
for f in POSSIBLE_FORMATS:
try:
d = datetime.date.strptime(date_str, f)
break
except ValueError:
continue
raise ValueError
booking = Booking.objects.get(booking_number='BN34D', booking_date=d)
答案 2 :(得分:1)
我用这个解决了这个问题:
from django.utils import formats
formats.get_format('DATE_INPUT_FORMATS')[0]
然后,此格式用于解析日期xyld showed。