简体   繁体   English

Django - 转换 datetime.date 元组

[英]Django - converting datetime.date tuples

I'm trying to get some dates from my model.我正在尝试从我的 model 中获取一些日期。

In my queryset I get:在我的查询集中我得到:

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)]

when querying the DB for my "reservation dates".在数据库中查询我的“预订日期”时。

I need them to convert to normal dates,and if possibile,format them like this:我需要它们转换为正常日期,如果可能的话,像这样格式化它们:

"19-10-2019"

So, dd-mm-yy format.所以,dd-mm-yy 格式。

I created a monstrosity to do this for me, wich (kinda sometimes) works...I will show the monster just for lols.我创造了一个怪物来为我做这件事,至极(有时有点)工作......我会展示怪物只是为了大声笑。

here you go:你在这里 go:

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
            })
        })

What would be the correct way of achieving what I want to do here?在这里实现我想要做的事情的正确方法是什么? Thanks so much !非常感谢 !

edit - my view:编辑 - 我的观点:

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)

You should use the appropriate data type to transfer information between Django and Javascript, which is JSON.您应该使用适当的数据类型在 Django 和 Javascript 之间传输信息,即 JSON。 In your view, you should convert the dates to strings in the relevant format, and then convert the data to JSON.在您看来,您应该将日期转换为相关格式的字符串,然后将数据转换为 JSON。

unavailable = [dt.strftime('%-d-%m-%Y') for dt in itertools.chain(*unavailable_dates)]
args['unavailable_dates'] = json.dumps(unavailable)

then in your JS you can do:然后在你的 JS 中你可以这样做:

var dates = JSON.parse("{{ unavailable_dates|safe }}")

and there's no need to reformat them there.并且没有必要在那里重新格式化它们。

Note however that your Django code does not give you all the unavailable dates;但是请注意,您的 Django 代码不会为您提供所有不可用的日期; it just gives you the start and end date for each reservation.它只是为您提供每次预订的开始和结束日期。 You probably want to do something like this to get all the unavailable dates:您可能想做这样的事情来获取所有不可用的日期:

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)

This now gives you a flat list, consisting of all the dates between start and end inclusive for all the reservations for the apartment, properly formatted.现在,这为您提供了一个平面列表,其中包含公寓所有预订的开始和结束之间的所有日期,格式正确。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM