Django Template Language свернутый вывод

Мой шаблон включает цикл for и для каждой итерации он решает, создавать ли новый контейнер сообщений, просто добавлять сообщения или закрывать контейнер.

room.html

В моем первом чате все в полном порядке и он хорошо генерируется. First chatroom.

Потом я пытаюсь создать новый, отправить новое сообщение, все в порядке. Но когда я перезагрузил его, произошли плохие вещи: enter image description here

Похоже, что мой первый if почему-то иногда не работает. Но get_next_user и get_previous_user работают хорошо, в них нет никаких проблем (если нет пользователя на prev или next, они возвращают None).

Вот мои модели

models.py

User = get_user_model()

class Chat(models.Model):
    content = models.CharField(max_length=1000)
    timestamp = models.DateTimeField(auto_now=True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    room = models.ForeignKey('ChatRoom', on_delete=models.CASCADE)

    def get_previous_user(self):
        """ Get the previous chat user"""
        objects = list(Chat.objects.all())

        if objects[0] != self:
            previous = objects[objects.index(self)-1].user
        else:
            previous = None

        return previous

    def get_next_user(self):
        """ Get the next chat user """
        objects = list(Chat.objects.all())

        if objects[-1] != self:
            next = objects[objects.index(self)+1].user
        else:
            next = None

        return next


class ChatRoom(models.Model):
    name = models.CharField(max_length=255)
    creator = models.ForeignKey(User, on_delete=models.DO_NOTHING, null=True,)

Также, в javascript нет никаких манипуляций с содержимым, только всплывающее окно при удалении и создание/применение chat__container в сообщении.

Вы берете идентификатор пользователя с помощью метода get_user_model(). Этот метод берет ваши данные с самого начала, но он не продолжает перекодировку. Вы должны изменить свой метод, чтобы брать данные пользователя для id.

Вы можете найти способ работы get_user_model() в ответе на этот вопрос:

Django использует get_user_model против settings.AUTH_USER_MODEL

Проблема заключалась в том, что я брал объекты чата из каждого объекта чата, который когда-либо существовал, не фильтруя его по комнате. Таким образом, я брал пользователей из предыдущей (первой в жизни) комнаты. И это причина, почему некоторые комнаты были сумасшедшими, а некоторые нет.

def get_prev/next_user(self):
  # This is the solution
  objects = list(Chat.objects.filter(room=self.room))

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