DRF:发出一个put请求会同时更新多个对象



我正在创建一个用于记录用户任务的时间表应用程序。这是Timesheet型号:

class Timesheet(models.Model):
date = models.ForeignKey(
'Attendance',
on_delete=models.CASCADE
)
start_time = models.TimeField()
duration = models.DurationField()
task = models.CharField(max_length=20)

在创建了几个任务之后,我需要一种通过PUT请求更新任务的方法。问题是,一个任务的start_time取决于先前任务的start_timeduration。因此,如果我想更改一个任务的duration,我需要更改它之后所有任务的start_time

我该如何做到这一点?我目前正在为TimesheetDetail视图使用通用视图类RetrieveUpdateDestroyAPIView。我应该重写put()还是update()方法?

我遵循@Klim Bim最初的建议,决定覆盖时间表模型中的save()方法,因为我希望确保每次创建/更新时的一致性。

def save(self, *args, **kwargs):
super().save(*args, **kwargs)
queryset = Timesheet.objects.filter(
date=self.date,
start_time__gt=self.start_time
).order_by('start_time')
corrected_time = (
datetime.combine(date.today(), self.start_time) + self.duration
).time()
for obj in queryset:
obj.time = corrected_time
corrected_time = (
datetime.combine(date.today(), obj.start_time) + obj.duration
).time()
super(Timesheet, obj).save()

最新更新