Django Template Language свернутый вывод
Мой шаблон включает цикл for и для каждой итерации он решает, создавать ли новый контейнер сообщений, просто добавлять сообщения или закрывать контейнер.
room.html
В моем первом чате все в полном порядке и он хорошо генерируется.
Потом я пытаюсь создать новый, отправить новое сообщение, все в порядке. Но когда я перезагрузил его, произошли плохие вещи:
Похоже, что мой первый 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))