Я хочу, чтобы проверить MessageState
всей Message
в каждом Threads
(т.е. order_threads_message
), и если какие-либо из потоков имеют все сообщения, скрытые затем сделать эту тему как скрытые слишком (/ или удалить его из order_threads_message). Я хочу сделать это в представлении перед тем, как передать его в шаблон. Как мне это сделать? Если вы не получили меня, пожалуйста, спросите. Я буду рад объяснить. Пожалуйста, помогите мне, как это сделать во взглядах. Я буду благодарен. Спасибо.Джанго - Запрос списка объектов и их полей объектов
models.py:
class Thread(models.Model):
subject = models.CharField(max_length=50, blank=True, null=True)
user = models.ManyToManyField(User)
class ThreadState(models.Model):
thread = models.ForeignKey(Thread)
user = models.ForeignKey(User)
thread_hidden = models.BooleanField(default=False)
class Message(models.Model):
thread = models.ForeignKey(Thread)
sender = models.ForeignKey(User)
sent_date = models.DateTimeField(default=datetime.now)
body = models.TextField()
class MessageState(models.Model):
message = models.ForeignKey(Message)
user = models.ForeignKey(User)
read = models.BooleanField(default=False)
message_hidden = models.BooleanField(default=False)
views.py
@login_required
def message(request):
user = request.user
threads = user.thread_set.all()
order_threads_message = threads.annotate(max_sent_date=Max('message__sent_date')).order_by('-max_sent_date')
if order_threads_message.count() > 0:
recent_thread = order_threads_message[0]
if recent_thread.message_set.all().count() > 0:
recent_thread_conversations = recent_thread.message_set.all()
return render(request, 'conversations.html', {
'all_threads':order_threads_message,
'conversations':recent_thread_conversations,
'active': recent_thread.id
})
else:
recent_thread_conversations = 0
return render(request, 'conversations.html', {
'all_threads':order_threads_message,
'conversations':recent_thread_conversations,
'active': recent_thread.id
})
else:
order_threads_message = 0
recent_thread_conversations = 0
return render(request, 'conversations.html', {
'all_threads':order_threads_message,
'conversations':recent_thread_conversations,
})
Я не совсем понимаю, почему MessageState является отдельной моделью из Message и, в частности, почему у вас есть отношения ForeignKey - это означает, что для каждого сообщения может быть несколько MessageStates, что не имеет смысла (что, если одно состояние говорит скрытый, а другой нет?) –
Да, вот в чем его смысл. Таким образом, сообщение может быть скрыто для пользователя, который скрыл сообщение, но остается видимым для других пользователей, которые этого не сделали. – Kakar