Как изменить порядок приоритетных данных после вставки новых данных? - PullRequest
0 голосов
/ 09 июля 2019

В данный момент я создаю приложение Ticket App с помощью формы Django и т. Д. Я пытаюсь создать поле «приоритет» для моей модели, в котором номер приоритета не должен повторяться, и если новый набор приоритетов уже существует, другой приоритет должен бытьпереупорядочено соответственно.Следовательно, никакие приоритеты не должны дублироваться.

Я относительно свежий в Джанго.У меня возникли проблемы с пониманием того, как я могу изменить свой models.py, чтобы я мог создать метод, который будет выполнять определенную команду для обновления моего другого существующего «приоритета» каждый раз, когда я отправляю запрос «post» после нажатия кнопки «submit»кнопка

models.py

from django.db.models import F
from django.db import models

class Request(models.Model):
    title = models.CharField(max_length=255, unique=True)
    description = models.TextField(blank=True, null=True)
    priority = models.PositiveIntegerField()


    # This is what I have tried:
    def reorder_priority(self):
        existing_feature = Request.objects.get(priority=self.priority)
        foo = Request.objects.filter(priority__gte=existing_feature.priority)
        foo.update(priority=F('priority') + 1)
        foo.save()

    def __str__(self):
        return self.title

Например:

Title1, Priority = 1

Title2, Priority = 2

Title3, Priority = 3

Пользователь добавляет новый TitleX с приоритетом = 3, Ожидаемый результат:

Название 3, Приоритет = 4

Общий:

Название 1, Приоритет = 1

Название 2, Приоритет = 2

НазваниеX, Приоритет= 3

Название 3, Приоритет = 4

1 Ответ

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

Я придумал это решение, которое работало так, как я хотел. Не стесняйтесь комментировать это.

models.py

 def save(self, **kwargs):
        # try to check if there is any existing priority that is duplicated:
        try:
            existing_feature = Request.objects.get(priority=self.priority)
            foo = Request.objects.filter(priority__gte=existing_feature.priority)
            if foo.count() > 0:
                foo.update(priority=F('priority') + 1)

            super(Request, self).save(**kwargs)

        except:
            super(Request, self).save(**kwargs)
...