Как назначить приоритетный механизм и управлять им - PullRequest
0 голосов
/ 10 июля 2020

Я работаю над Django веб-приложением, в котором пользователи создают список задач. Каждая задача - это запись в базе данных (ie: объект Django), и пользователь может назначить каждой задаче приоритет.

Если пользователь создает 10 задач, каждая из них будет иметь приоритет от 1 до 10. Я изо всех сил пытаюсь придумать эффективный способ позволить пользователям изменять приоритет задач, а также вставлять и удалять задачи. Например:

  • Пользователь понижает приоритет задачи 3 до 7. Приоритеты других задач необходимо соответствующим образом изменить.
  • Пользователь удаляет задачу с приоритетом 4. Еще раз оставшиеся Приоритеты задач должны быть скорректированы.
  • Пользователь вставляет новую задачу с приоритетом 5. Это означает, что существующие задачи с приоритетом 5 необходимо сместить.

Есть ли какие-либо шаблоны проектирования или предложения о том, как управлять тем, что по сути является очередью, на основе приоритета каждого элемента, позволяя пользователям:

  • перемещать задачи вверх и вниз по списку приоритетов
  • удалять задачи
  • Добавлять новые задачи с указанным приоритетом.

1 Ответ

0 голосов
/ 10 июля 2020

Почему вы так усердно строите очереди? Разве вы не можете просто использовать .order_by

Предположим, это ваша модель:

class Task(models.Model):
    user = models.ForeignKey(User)
    priority = models.IntegerField()
    created = models.DateTimeField(auto_now=True)

Затем, когда вам нужен список всех задач для пользователя, вы можете просто выполнить

qs = Task.objects.filter(user=your_user_instance).order_by('-priority', 'created')

Теперь переменная qs является итератором, который сначала перечисляет задачи с наивысшим приоритетом (и если две задачи имеют одинаковый приоритет, сначала будет указана более старая)

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