Django 如何使用@property方法生成包含计算的POST方法
我正在使用Django 如何使用@property方法生成包含计算的POST方法,django,python-3.x,django-rest-framework,django-views,python-requests,Django,Python 3.x,Django Rest Framework,Django Views,Python Requests,我正在使用REST框架和django 1.11构建一个API。我有一个休假类,它有一个@属性方法总天数我想做一个发布方法,其中需要开始日期和返回日期来给出总天数的结果。如何在views.py中执行此操作 以下是离开课程: class Leave(models.Model): LEAVE_STATUS = ( ('A', 'Approved'), ('R', 'Rejected'), ('P', 'Pending'), )
REST框架
和django 1.11
构建一个API。我有一个休假
类,它有一个@属性
方法总天数
我想做一个发布
方法,其中需要开始日期
和返回日期
来给出总天数
的结果。如何在views.py中执行此操作
以下是离开
课程:
class Leave(models.Model):
LEAVE_STATUS = (
('A', 'Approved'),
('R', 'Rejected'),
('P', 'Pending'),
)
leave_id = models.AutoField(primary_key=True)
applicant = models.ForeignKey(
User, related_name='applicant', on_delete=models.CASCADE)
approver = models.ForeignKey(
User, related_name='approver', on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
responded_on = models.DateTimeField(auto_now=True, null=True)
leave_type = models.ForeignKey(LeaveType)
number_of_days = models.IntegerField()
start_date = models.DateField()
return_date = models.DateField()
leave_status = models.CharField(
max_length=1, choices=LEAVE_STATUS, default='R')
additional_message = models.TextField(max_length=200)
leave_subject = models.CharField(max_length=40)
leave_reason = models.TextField(max_length=200)
total_days = models.IntegerField()
# approved_by
# leave count
@property
def total_days(self):
oneday = datetime.timedelta(days=1)
dt = self.start_date
total_days = 0
while(dt <= self.return_date):
if not dt.isoweekday() in (6, 7):
total_days += 1
dt += oneday
return totaldays
def __str__(self):
return self.leave_status
请假(models.Model):
休假状态=(
(‘A’、‘批准’),
(‘R’、‘拒绝’),
('P','Pending'),
)
left\u id=models.AutoField(主键=True)
申请人=models.ForeignKey(
用户,相关用户(在_delete=models.CASCADE上)
审批人=models.ForeignKey(
用户,相关\u name='approver',在\u delete=models.CASCADE上)
已创建\u on=models.DateTimeField(自动\u now\u add=True)
已响应的\u on=models.DateTimeField(auto\u now=True,null=True)
leave_type=models.ForeignKey(LeaveType)
天数=models.IntegerField()
开始日期=models.DateField()
return\u date=models.DateField()
离开_status=models.CharField(
最大长度=1,选项=LEAVE\u状态,默认值=R')
附加消息=models.TextField(最大长度=200)
离开主题=models.CharField(最大长度=40)
离开原因=models.TextField(最大长度=200)
总天数=models.IntegerField()
#批准人
#请假计数
@财产
def总天数(自我):
oneday=datetime.timedelta(天=1)
dt=自启动日期
总天数=0
(dt试试这个,
from rest_framework.views import APIView
class MyAPI(APIView):
def total_days(self,start_date,return_date):
oneday = datetime.timedelta(days=1)
dt = start_date
total_days = 0
while (dt <= return_date):
if not dt.isoweekday() in (6, 7):
total_days += 1
dt += oneday
return total_days
def post(self,request,*args,**kwargs):
start_date = request.data.get('start_date')
return_date = request.data.get('return_date')
total_days = self.total_days(start_date,return_date)
# do some other stuff if you want
return some response
从rest\u framework.views导入APIView
类MyAPI(APIView):
def总天数(自身、开始日期、返回日期):
oneday=datetime.timedelta(天=1)
dt=开始日期
总天数=0
而(dt)是否使用模型序列化程序和视图集?