Как добавить целое число к текущему месяцу и затем обновить поле даты в django

Я просто пытаюсь получить текущий месяц и затем добавить к нему целое число, например 3 месяца, затем обновить мое поле даты obj до этого значения.

my view.py :

def worklist(request,pk):
    vessel_id = Vessel.objects.get(id=pk)
    vessel = Vessel.objects.all()
    component = vessel_id.components.all()
    components = component.prefetch_related(
        'jobs').filter(jobs__isnull=False)
    if request.method == 'POST' and 'form-execute' in request.POST:
        this_job = Job.objects.get(pk=request.POST.get('execute_job_id'))
        job_type = this_job.type
        job_due_date=this_job.due_date
        job_interval =this_job.interval
        dt = datetime.datetime.today().month
        if job_type =='O':
            this_job.delete()
        else: job_due_date = dt + relativedelta(months=job_interval)
        return HttpResponseRedirect(request.path_info)
    context = {"component": components,"vessel_id":vessel_id,"vessel":vessel }
        
    return render(request, "worklist.html", context)

Я просто хочу, чтобы дата выполнения этого задания была равна этому месяцу плюс интервал этого задания, который является целым числом

вот model.py, если это поможет :

class Job(models.Model):
    job_type = (
        ('I', 'Interval'),
        ('O', 'One time'),
    )
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=100)
    type = models.CharField(max_length=1, choices=job_type)
    interval = models.IntegerField()
    is_critical = models.BooleanField()
    due_date = models.DateField()
    rank = models.ManyToManyField(UserRank,related_name='jRank')
    component = models.ForeignKey(
        Component, related_name='jobs', on_delete=models.CASCADE)
    runninghours = models.ForeignKey(
        RunningHours, related_name="RHjobs", on_delete=models.CASCADE,blank=True)   

    def __str__(self):
        return self.name

Я думаю, что вы должны изменить эту строку:

dt = datetime.datetime.today().month

to:

dt = datetime.datetime.today()

В противном случае вы добавляете месяцы к целому числу.

Это datetime.datetime.now() (или datetime.date.today())

Если вы хотите перескочить вперед на количество времени, равное N 30-дневным "месяцам"

now = datetime.datetime.now() + datetime.timedelta ( seconds=N*30*24*60*60 )

Если вы хотите переустановить месяц, это гораздо сложнее из-за проблем с такими вещами, как високосные годы и различное количество дней в месяце.

year = now.year
month = now.month
day = now.day
hour = now.hour
minn = now.minute
sec = now.second

month = month + N  

# some issues ... month > 12? day = 31 and month = 11?
# after you resolve them

future_time = datetime.datetime( year, month, day, hour, minn, sec)

(min является встроенной функцией Python. Вы можете наложить его, но это не очень хорошая практика. Следовательно, minn)

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