【发布时间】:2018-07-29 14:22:08
【问题描述】:
我正在开发一个聊天应用程序。这些模型是:
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 控制。但我无法使用它。
【问题讨论】:
-
这没有多大意义,因为一个字典只能包含一个键一次,你的字典包含
user1和user2两次。 -
但是,您可以使用例如元组的列表(在 JSON 中它是列表的列表)。其中每个元组包含 2 个元素;用户和消息列表。
-
此外,我不清楚
msg1应该包含什么。一个字符串(消息)?那么user1是什么?integer(id)? -
没有。不要考虑json。我用json来理解。我需要一个查询集。
-
但是查询集通常不包含映射到列表的键(除非 字段 是列表)。
标签: django django-models django-views django-queryset