Django查询对象列表及其对象字段

2024-04-25 14:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查每个Threads(即order_threads_message)中所有MessageStateMessage,如果任何线程都隐藏了所有消息,那么也将该线程设为隐藏线程(/或者从消息顺序中删除它)。我想在视图中这样做,然后再将其传递给模板。我该怎么做?如果你不明白我的意思,请问我。我很乐意解释。请帮助我如何在视图中执行此操作。我会很感激的。非常感谢。你知道吗

你知道吗型号.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)

你知道吗视图.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,
            })

Tags: defaultmessagemodelmodelsrequestorderallconversations
1条回答
网友
1楼 · 发布于 2024-04-25 14:34:43

我已对以下模型运行了此查询:

型号

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, related_name = 'message_thread')
    sender = models.ForeignKey(User)
    sent_date = models.DateTimeField(default=datetime.now)
    body = models.TextField()

class MessageState(models.Model):
    message = models.ForeignKey(Message, related_name='messagestate_message')
    user = models.ForeignKey(User)
    read = models.BooleanField(default=False)
    message_hidden = models.BooleanField(default=False)

查询

Thread.objects.filter(message_thread__in = Message.objects.filter(messagestate_message__in=MessageState.objects.filter(message_hidden=False)))

如果查询的MessageStatemessage_hidden中至少有一个是False,则此查询将返回Thread对象。你知道吗

相关问题 更多 >