Вращение пользователя внутри модели в Django

Здравствуйте, у меня есть две модели, как показано ниже:

class ShiftModel(BaseModel):
    name = models.CharField(max_length=256)
class UserShiftModel(BaseModel):
    user = models.OneToOneField(
        "user.User", on_delete=models.CASCADE, related_name="user_shift"
    )
    shift = models.ForeignKey(
        ShiftModel, on_delete=models.CASCADE, related_name="shift_user"
    )

Теперь предположим, что у меня есть четыре смены в моем ShiftModel:

s1, s2, s3, s4

В каждой смене у меня есть уникальные пользователи, хранящиеся в UserShiftModel.

Например:

s1 = [u1, u2]
s2 = [u3, u4]
s3 = [u5, u6]
s4 = [u7, u8]

Теперь я хочу повернуть сдвиги в обратном направлении, то есть [u1, u2] будет перемещен из s1 в s4, [u7, u8] будет перемещен из s4 в s3 и так далее.

Как я могу этого достичь?

Дела, которые я сделал до сих пор:

current_branch = organization_models.BranchModel.objects.get(
        id=kwargs.get("branch_id")
    )
rotating_shifts = current_branch.branch_shift.filter(
        shift_type="rotating"
    ).prefetch_related(
        Prefetch(
            "shift_user",
            queryset=models.UserShiftModel.objects.filter(user__is_active=True),
        )
    )
for i in range(len(rotating_shifts)):
    shift = list(rotating_shifts)[i]
    previous_shift = list(rotating_shifts)[i - 1]
    for user in shift.shift_user.all():
        user.shift = previous_shift
        user.save()

Но вывод вышеприведенного кода выглядит следующим образом:

s1 = [u3, u4]
s2 = [u5, u6]
s3 = [u7, u8, u1, u2]
s4 = []

Я хочу вот что:

s1 = [u3, u4]
s2 = [u5, u6]
s3 = [u7, u8]
s4 = [u1, u2]

Надеюсь, я достаточно ясно выразился.

Спасибо

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