У меня есть база данных, в которой есть список «Уровней опыта», использующий Django Python.
Каждый уровень имеет уникальный атрибут ранга, который является положительным целым числом больше единицы. Ранг с более низким значением является первым навыком в раскрывающемся списке, а ранг с самым высоким значением является последним, поэтому «Старший» с рангом 3 также все ниже.
Я создаю конечную точку для обновления и вставки значений в этот ранжированный список, но у меня много проблем.
Чтобы вставить новое значение, мне нужно изменить все, что выше нового ранга, а затем вставить его. Какой самый эффективный способ сделать this?
Редактировать: Добавление кода.
class ExperienceLevel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
experience_level = models.CharField(max_length=20, unique=True)
rank = models.PositiveIntegerField(validators=[MinValueValidator(1)], unique=True, default=1)
Так что в базе данных у меня может быть что-то вроде этого:
{
"id": uuid,
"experience_level": "junior",
"rank": 1
}
{
"id": uuid,
"experience_level": "senior,
"rank": 2
}
Если я хочу добавить новый уровень опыта_ между младшим и старшим, на переднем крае я бы вызывал API и обновлял каждый experience_level
определенным образом несколько раз, но я не могу найти хороший способ сделать это sh с помощью бэкэнда.
Я думаю добавить менеджера, который даст мне все experience_levels
, которые выше определенного ранга (новый уровень опыта).
Тогда я смогу go через l oop и увеличивать каждый rank
на 1, а затем вставьте новый ранг.
Я мог бы создать менеджера:
class ExperienceManager(models.Manager):
def get_queryset(self, rank):
return super().get_queryset().filter(rank_gte=rank).order_by('-rank')
и добавить его в модель ExperienceLevel.
greater_than = ExperienceManager
И на PUT получить список всех рангов выше чем новый ранг цели и добавить один к их значениям ранга.