Каков наиболее эффективный способ вставить значение в список с целым рейтингом? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть база данных, в которой есть список «Уровней опыта», использующий 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 получить список всех рангов выше чем новый ранг цели и добавить один к их значениям ранга.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...