Функция или метод для повторяющегося события в python / django

models:
from django.db import models

class datecrt(models.Model):
    name=models.CharField(max_length=255)
    stdate=models.DateField()
    sttime=models.TimeField()
    endate=models.DateField()

forms:
import datetime
from xml.dom.minidom import Attr
from django import forms
from .models import datecrt


class dateform(forms.ModelForm):
    class Meta:
        model=datecrt
        fields='__all__'
        widgets={
            'stdate':forms.DateInput(
                attrs={'type':'date','class':'form-control'},
                format='%D-%m-%yy',
            ),
            'sttime':forms.TimeInput(
                attrs={'type':'time','class':'form-control'},
                format='%H:%M',
            ),
            'endate':forms.DateInput(
                attrs={'type':'date','class':'form-control'},
                format='%D-%m-%yy',
            )
        }

    def __init__(self,*args,**kwargs):
        super(dateform,self).__init__(*args,**kwargs)
        self.fields['stdate'].imput_format=('%D-%m-%yy',)
        self.fields['sttime'].imput_format=('%H:%M',)
        self.fields['endate'].imput_format=('%D-%m-%yy',)

Views:
from unicodedata import name
from django.shortcuts import redirect, render
from .forms import dateform
from .models import datecrt


def datecr(request):
    if request.method=='GET':
        form=dateform()
        return render(request, 'date.html', {'form':form})
    else:
        form=dateform(request.POST)
        if form.is_valid():
            form.save()
        return redirect('/dateview')

def dateview(request):
    context={'dateview':datecrt.objects.all()}
    return render(request, 'dateview.html',context)

Когда я создаю это бронирование 1 февраля, а дату окончания выберу 5 февраля, моя задача состоит в том, чтобы созданное бронирование отображало имя, дату и время до 5 февраля автоматически в шаблоне просмотра даты, без того, чтобы я создавал то же самое для 2 февраля, 3 февраля до 5 февраля вручную.

Вам нужно фильтровать информацию в вашем контексте. Просто измените dateview.context на это:

def dateview(request):
    today = datetime.datetime.now().date()
    context = {'dateview': datecrt.objects.filter(stdate__lte=today, endate__gte=today)}
    return render(request, 'dateview.html', context)

По сути это означает, что dateview будет включать только datecrt объекты с stdate less than or equal to (так же как '<=') сегодняшней датой и endate greater than or equal to (так же как '>=') сегодняшней датой. Он будет обновлять запрос при каждой загрузке сайта.

Я еще не включил Time в это. Надеюсь, теперь вы сможете справиться самостоятельно :)

Вернуться на верх