【问题标题】:Finding out the difference of months to int in django在 django 中找出月份的差异
【发布时间】:2022-01-28 17:31:26
【问题描述】:

我试图获取项目从开始日期到结束日期的月差,并将其计算为每月更新以显示项目进度的百分比,但我当前的代码没有给出计算价值.如果我删除 .month 它会说 /: 'int' 和 'datetime.timedelta' 的操作数类型不受支持

Models.py

class Projects(models.Model):

id=models.AutoField(primary_key=True)
project_name=models.CharField(max_length=255)
project_manager=models.ForeignKey(CustomUser,on_delete=models.CASCADE, limit_choices_to={'is_project_manager' : True})
client_name=models.ForeignKey(Clients,on_delete=models.CASCADE, null=True)
project_pic=models.ImageField(upload_to='static/website/project-images')
project_start_date=models.DateField(null=True)
project_end_date=models.DateField(null=True)
project_description=models.TextField(null=True)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
is_draft = models.BooleanField(default=True)
objects=models.Manager()

class Meta:
    verbose_name_plural = 'Project'

def __str__(self):
    return f'{self.project_name}'



class MonthlyProjectStatus(models.Model):

id=models.AutoField(primary_key=True)
project_name=models.ForeignKey(Projects,on_delete=models.CASCADE)
project_manager=models.ForeignKey(CustomUser,on_delete=models.CASCADE, null=True)
client_name=models.ForeignKey(Clients,on_delete=models.CASCADE, null=True)
attachments=models.FileField(upload_to='static/website/files', null=True)
project_update=models.TextField(null=True)
created_at=models.DateTimeField(auto_now_add=True)
updated_at=models.DateTimeField(auto_now=True)
is_draft = models.BooleanField(default=True)

class Meta: 
    verbose_name_plural = 'Monthly Status'

def __str__(self):
    return f'{self.project_name}'

Views.py

def project_details(request, pk):


projects = Projects.objects.get(id=pk)
employed = Employee.objects.filter(project_site=projects)
invents = Project_Inventory.objects.filter(project_site=projects)
months = MonthlyProjectStatus.objects.filter(project_name=projects).count()

dt = projects.project_start_date.month - projects.project_end_date.month

sums = (months)/(dt) * 100

context = {

    'projects' : projects,
    'employed' : employed,
    'invents' : invents,
    'dt' : dt,
    'months' : months,
    'sums' : sums,

}

template_name ='project-admin/project-details.html'
return render(request, template_name, context) 

【问题讨论】:

    标签: python html css django django-views


    【解决方案1】:

    两个日期之间的差异是timedelta。您可以将其转换为天数。

    d1 = datetime.date(2020,1,1)
    d2 = datetime.date(2021,1,1)
    dd = d2-d1
    days = dd.days  # 366
    

    它不支持转换为月份,因为一个月是多少?您可以除以 30 得到一个近似值,或按天计算。

    【讨论】:

    • 谢谢,它对我有用,我真的应该把它除以 30 天来得到大概的月份。
    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 2019-08-12
    相关资源
    最近更新 更多