代码之家  ›  专栏  ›  技术社区  ›  Sreekanth Reddy Balne

如何展望未来并在Django中订购查询集?

  •  1
  • Sreekanth Reddy Balne  · 技术社区  · 8 年前

    我正在开发一个聊天应用程序。模型是:

    User:
    name
    

    和

    Message:
    user = ForeignKeyField(User, related_name="messages"),
    message,
    time
    

    现在,数据库中只有两个用户。假设消息对象如下:

    msg1:user1:“你好”

    msg2:user1:“你好吗?”

    msg3:user2:“我很好。”

    msg4:user1:“怎么了?”

    msg5:user2:“没什么。”

    msg6:user2:“嗯。”

    现在,我需要按如下顺序获取消息(比如json):

    {user1:[msg1, msg2], user2:[msg3], user1:[msg4], user2:[msg5, msg6]}

    我需要在查询集中过滤它,比如:

    Message.objects.filter(....).order(....)
    

    ***在这里使用JSON来理解。

    • 怎么能做到?
    • 有什么缺点吗?
    • 我将在以后在模板中呈现这个。那么,是否可以在使用for循环的模板中订购相同的内容?

    好啊。如果这不能在查询集中实现。然后让下面的模板作为示例模板:

    <div class="chat">
      <div class="photo">
      </div>
      <div class="msg"></div>
      <div class="msg"></div>
    </div>
    

    如何实现它:

    {% for msg in msgs %}
       <div class="chat">
         <div class="photo">
         </div>
         <div class="msg">msg.message</div>
         <div class="msg">msg.message</div>//this should happen only if msg.user is same as previous msg.user
       </div>
    {% endfor %}
    

    那么,如何呢?我知道Django的 ifchanged 控制。但我不能用它。

    1 回复  |  直到 8 年前
        1
  •  1
  •   willeM_ Van Onsem    8 年前

    user1

    user

    [
      (user1, [msg1, msg2]),
      (user2, [msg3]),
      (user1, [msg4]),
      (user2, [msg5, msg6])
    ]
    

    Message time itertools.groupby

    from itertools import groupby
    from operator import attrgetter
    
    qs = Message.objects.select_related('user').order_by('time')
    all_msgs = [(u, list(ms)) for (u, ms) in groupby(qs, attrgetter('user'))]
    return render(request, 'template.html', {'all_msgs': all_msgs})

    {% for user, msgs in all_msgs %}
      <div class="chat">
        <div class="photo">{{ user.photo }}
        </div>
        {% for msg in msgs %}
        <div class="msg">msg.message</div>
        {% endfor %}
      </div>
    {% endfor %}

    for {{ user.photo }}

    推荐文章