Python django-查询对象列表及其对象字段
我想检查每个线程中所有消息的MessageState,即order\u Threads\u消息,如果其中任何线程隐藏了所有消息,则将该线程设置为hidden(隐藏),或者将其从order\u Threads\u消息中删除。在将视图传递给模板之前,我希望在视图中执行此操作。我该怎么做?如果你不明白,请问我。我很乐意解释。请帮助我如何在视图中执行此操作。我将不胜感激。多谢各位 models.py:Python django-查询对象列表及其对象字段,python,django,multithreading,django-views,Python,Django,Multithreading,Django Views,我想检查每个线程中所有消息的MessageState,即order\u Threads\u消息,如果其中任何线程隐藏了所有消息,则将该线程设置为hidden(隐藏),或者将其从order\u Threads\u消息中删除。在将视图传递给模板之前,我希望在视图中执行此操作。我该怎么做?如果你不明白,请问我。我很乐意解释。请帮助我如何在视图中执行此操作。我将不胜感激。多谢各位 models.py: class Thread(models.Model): subject = models.Ch
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_hidden中至少有一个为False,则此查询将返回线程对象。我不太理解MessageState为什么是与message分开的模型,特别是为什么您有ForeignKey关系-这意味着每条消息可以有多个MessageState,这是没有意义的,如果一个州说隐藏,而另一个州不说呢?是的,这就是问题的关键。因此,对于已隐藏该消息的用户,该消息可能会被隐藏,但对其他未隐藏该消息的用户仍然可见。我将进行验证并再次返回。@ruddra Hi,我收到一个错误字段错误:无法将关键字“messagestate\u message”解析为字段。选项:body,id,messagestate,sender,sender,id,sent,date,thread,thread实际上我通过提供相关的名称稍微修改了@Kakar的定义,请检查我的答案:。
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)))