Refactor Assignment model to enforce single rota assignment per worker and update related view logic to prevent multiple assignments
This commit is contained in:
@@ -297,13 +297,18 @@ class Worker(models.Model):
|
||||
class Assignment(models.Model):
|
||||
"""Join model assigning a worker to a rota (can hold role / metadata)."""
|
||||
|
||||
worker = models.ForeignKey(Worker, on_delete=models.CASCADE)
|
||||
# Enforce that a Worker may only be assigned to a single RotaSchedule by
|
||||
# using a OneToOneField here. This ensures at the DB level that each
|
||||
# Worker has at most one Assignment (and therefore at most one rota).
|
||||
worker = models.OneToOneField(Worker, on_delete=models.CASCADE)
|
||||
rota = models.ForeignKey(RotaSchedule, on_delete=models.CASCADE)
|
||||
role = models.CharField(max_length=100, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
class Meta:
|
||||
unique_together = ("worker", "rota")
|
||||
# With OneToOneField on worker, uniqueness for (worker, rota) is
|
||||
# implied by the worker uniqueness. Keep ordering for convenience.
|
||||
ordering = ("-created_at",)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.worker} -> {self.rota}"
|
||||
|
||||
Reference in New Issue
Block a user