Django - 转换 datetime.date 元组
Django - converting datetime.date tuples
我正在尝试从我的模型中获取一些日期。
在我的查询集中我得到:
datetime.date(2019, 10, 15), datetime.date(2019, 10, 18), datetime.date(2019, 10, 2), datetime.date(2019, 9, 18), datetime.date(2019, 10, 28), datetime.date(2019, 10, 29)]
在数据库中查询我的“预订日期”时。
我需要将它们转换为正常日期,如果可能的话,将它们格式化为:
"19-10-2019"
所以,dd-mm-yy 格式。
我创造了一个怪物来为我做这件事,这(有时)有效......我会展示这个怪物只是为了笑。
给你:
var unavailableDates = "{{ unavailable_dates }}"
unavailableDates = unavailableDates.replace(/datetime.date/g, "").replace(/[{()}]/g, "").replace(/]/g, ' ').replace("[", ' ').split()
var y = unavailableDates[0].match(/.{1,14}/g)
var dates = []
y.forEach((date, i) => {
var now = moment(date).format('D-MM-YYYY')
dates.push(now)
})
console.log(dates);
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
if ($.inArray(dmy, dates) == -1) {
return [true, ""];
} else {
return [false, "", "Unavailable"];
}
}
$(function () {
$("#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: unavailable
})
})
实现我在这里想要做的事情的正确方法是什么?
非常感谢!
编辑 - 我的观点:
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
context = {'apartment': apartment, }
unavailable_dates = apartment.reservations.values_list('start_date', 'end_date')
form = ReservationForm()
if request.method == 'GET':
form = ReservationForm()
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
return HttpResponseRedirect('/booking/')
args = {}
args['form'] = form
args['apartment'] = context
args['reservation'] = reservation
args['unavailable_dates'] = list(itertools.chain(*unavailable_dates))
print(unavailable_dates)
return render(request, 'booking/apartment.html', args)
您应该使用适当的数据类型在 Django 和 Javascript 之间传输信息,即 JSON。在您看来,您应该将日期转换为相关格式的字符串,然后将数据转换为 JSON.
unavailable = [dt.strftime('%-d-%m-%Y') for dt in itertools.chain(*unavailable_dates)]
args['unavailable_dates'] = json.dumps(unavailable)
然后在你的 JS 中你可以这样做:
var dates = JSON.parse("{{ unavailable_dates|safe }}")
并且不需要在那里重新格式化它们。
但是请注意,您的 Django 代码 不会 为您提供所有不可用的日期;它只是为您提供每次预订的开始和结束日期。你可能想做这样的事情来获取所有不可用的日期:
unavailable = []
for start, end in apartment.reservations.values_list('start_date', 'end_date'):
while start <= end:
unavailable.append(start.strftime('%-d-%m-%Y'))
start += datetime.timedelta(days=1)
args['unavailable_dates'] = json.dumps(unavailable)
这现在为您提供了一个简单的列表,包含所有公寓预订的开始和结束日期,格式正确。
我正在尝试从我的模型中获取一些日期。
在我的查询集中我得到:
datetime.date(2019, 10, 15), datetime.date(2019, 10, 18), datetime.date(2019, 10, 2), datetime.date(2019, 9, 18), datetime.date(2019, 10, 28), datetime.date(2019, 10, 29)]
在数据库中查询我的“预订日期”时。
我需要将它们转换为正常日期,如果可能的话,将它们格式化为:
"19-10-2019"
所以,dd-mm-yy 格式。
我创造了一个怪物来为我做这件事,这(有时)有效......我会展示这个怪物只是为了笑。
给你:
var unavailableDates = "{{ unavailable_dates }}"
unavailableDates = unavailableDates.replace(/datetime.date/g, "").replace(/[{()}]/g, "").replace(/]/g, ' ').replace("[", ' ').split()
var y = unavailableDates[0].match(/.{1,14}/g)
var dates = []
y.forEach((date, i) => {
var now = moment(date).format('D-MM-YYYY')
dates.push(now)
})
console.log(dates);
function unavailable(date) {
dmy = date.getDate() + "-" + (date.getMonth() + 1) + "-" + date.getFullYear();
if ($.inArray(dmy, dates) == -1) {
return [true, ""];
} else {
return [false, "", "Unavailable"];
}
}
$(function () {
$("#datepicker").datepicker({
dateFormat: 'yy-mm-dd',
beforeShowDay: unavailable
})
})
实现我在这里想要做的事情的正确方法是什么? 非常感谢!
编辑 - 我的观点:
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
context = {'apartment': apartment, }
unavailable_dates = apartment.reservations.values_list('start_date', 'end_date')
form = ReservationForm()
if request.method == 'GET':
form = ReservationForm()
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
return HttpResponseRedirect('/booking/')
args = {}
args['form'] = form
args['apartment'] = context
args['reservation'] = reservation
args['unavailable_dates'] = list(itertools.chain(*unavailable_dates))
print(unavailable_dates)
return render(request, 'booking/apartment.html', args)
您应该使用适当的数据类型在 Django 和 Javascript 之间传输信息,即 JSON。在您看来,您应该将日期转换为相关格式的字符串,然后将数据转换为 JSON.
unavailable = [dt.strftime('%-d-%m-%Y') for dt in itertools.chain(*unavailable_dates)]
args['unavailable_dates'] = json.dumps(unavailable)
然后在你的 JS 中你可以这样做:
var dates = JSON.parse("{{ unavailable_dates|safe }}")
并且不需要在那里重新格式化它们。
但是请注意,您的 Django 代码 不会 为您提供所有不可用的日期;它只是为您提供每次预订的开始和结束日期。你可能想做这样的事情来获取所有不可用的日期:
unavailable = []
for start, end in apartment.reservations.values_list('start_date', 'end_date'):
while start <= end:
unavailable.append(start.strftime('%-d-%m-%Y'))
start += datetime.timedelta(days=1)
args['unavailable_dates'] = json.dumps(unavailable)
这现在为您提供了一个简单的列表,包含所有公寓预订的开始和结束日期,格式正确。