Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django模板中呈现查询集?_Django_Python 3.x_Django Channels - Fatal编程技术网

如何在Django模板中呈现查询集?

如何在Django模板中呈现查询集?,django,python-3.x,django-channels,Django,Python 3.x,Django Channels,我正在创建一个收件箱,登录用户可以在其中使用Django Channel 2查看他们的所有邮件 我想在InboxView中呈现queryset,以便返回登录用户的所有线程对象 我的语法有问题,线程没有出现 如果有人能帮助我,我将不胜感激 我想在InboxView中呈现queryset,以便返回登录用户的所有线程对象 views.py class InboxView(LoginRequiredMixin, ListView): template_name = 'chat/inbox.htm

我正在创建一个收件箱,登录用户可以在其中使用Django Channel 2查看他们的所有邮件

我想在InboxView中呈现queryset,以便返回登录用户的所有线程对象

我的语法有问题,线程没有出现

如果有人能帮助我,我将不胜感激

我想在InboxView中呈现queryset,以便返回登录用户的所有线程对象

views.py

class InboxView(LoginRequiredMixin, ListView):
    template_name = 'chat/inbox.html'
    def get_queryset(self):
        return Thread.objects.by_user(self.request.user)
models.py

class ThreadManager(models.Manager):
    def by_user(self, user):
        qlookup = Q(first=user) | Q(second=user)
        qlookup2 = Q(first=user) & Q(second=user)
        qs = 
self.get_queryset().filter(qlookup).exclude(qlookup2).distinct()
        return qs


class Thread(models.Model):
    first        = models.ForeignKey(settings.AUTH_USER_MODEL, 
on_delete=models.CASCADE, related_name='chat_thread_first')
    second       = models.ForeignKey(settings.AUTH_USER_MODEL, 
on_delete=models.CASCADE, related_name='chat_thread_second')
    updated      = models.DateTimeField(auto_now=True)
    timestamp    = models.DateTimeField(auto_now_add=True)


    objects      = ThreadManager()

    def __str__(self):
        return f'{self.first}'

class ChatMessage(models.Model):
    thread      = models.ForeignKey(Thread, null=True, blank=True, 
on_delete=models.SET_NULL)
    user        = models.ForeignKey(settings.AUTH_USER_MODEL, 
verbose_name='sender', on_delete=models.CASCADE)
    message     = models.TextField()
    timestamp   = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f'{self.id}'
inbox.html

  {% for thread in object.thread_set.all?? %}
      <div class="chat_list">
            <h5>{{ thread.second }}<span 
class="chat_date">{{ thread.timestamp }}</span></h5>
            <p>{{ chat.message? }}</p>
      </div>
      {% endfor %}
{%用于对象中的线程。线程\u集。所有???%}
{{thread.second}{{thread.timestamp}}
{{chat.message?}}

{%endfor%}
您根本不需要它。您的视图已经基于线程,因此您会得到一个
对象\u列表
,其中包含线程对象的查询集

{% for thread in object_list %}

如果您有某个其他模型的详细视图,并且试图跟踪从该对象到其线程列表的关系,那么您尝试的语法将非常有用。

明白了,非常感谢。我使用该语法在聊天消息模型的DetailView中检索聊天消息,结果弄糊涂了。如果我想呈现最后一条聊天信息,语法是什么?我是否需要运行另一个forloop,因为
message
ChatMessage
模型中的一个字段?那么,您确实需要遵循线程对象的反向关系,因此
{{thread.ChatMessage\u set.last.message}
。非常感谢,我刚刚查看了你的博客,读了一些关于反向关系的文章。我不知道ListView的自动对象名是object_list…我还有很多要学的…祝你好运。