我要检查所有Message
的MessageState
每个Threads
(即order_threads_message
)对象的列表和它们的对象字段,如果任何线程具有隐藏,则所有的消息作出这样的主题为隐藏太(/或将其从order_threads_message中删除)。我想在视图中将其传递给模板之前执行此操作。我怎么做?如果你没有找到我,请询问。我会很乐意解释。请帮助我如何在意见中做到这一点。我会很感激。谢谢。Django的 - 查询
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关系 - 这意味着每个消息可以有多个MessageState,这是没有意义的(如果一个状态说隐藏,一个不?) –
是的,这就是它的重点。因此,隐藏该消息的用户可能隐藏该消息,但其他用户仍然可以看到该消息。 – Kakar