【问题标题】:Filtering the Users only if conversation occurred仅在发生对话时过滤用户
【发布时间】:2018-02-13 12:56:29
【问题描述】:

这是我的模型

class Message(models.Model):
sender = models.ForeignKey(User, related_name="sender")
receiver = models.ForeignKey(User, related_name="receiver")
msg_content = models.TextField()

只有在当前用户向他们发送消息或他们向当前用户发送消息时,我如何才能过滤掉用户,正如我们在社交网络上看到的那样?

我试过这样的

users = Message.objects.filter(Q(sender=request.user) | Q(receiver=request.user))

但它不起作用。它过滤用户的次数与发生对话的次数相同。

当我使用时

Message.objects.filter(Q(sender=user) | Q(receiver=user)).distinct('sender')

引发错误“此数据库后端不支持 DISTINCT ON 字段”(sqlite3)

请帮我处理这段代码。提前致谢!

【问题讨论】:

  • 只是.distinct() 应该可以工作,不是吗?
  • 将您的数据库后端更改为支持 DISTINCT 的后端。
  • 很抱歉,但事实并非如此
  • 我应该选择 PostgreSQL 吗?
  • 切换到 mysql 或 postgresql。他们支持不同的

标签: python django backend


【解决方案1】:

这样的用户:
users = User.objects.filter(sender__receiver__pk= request.user.id)

users = User.objects.filter(sender__receiver= request.user)
它返回所有向当前用户发送消息的用户!

【讨论】:

  • 先生,它说“无法将关键字'消息'解析到字段中。”
  • 让我检查一下。
  • 非常感谢先生。您使用 Q 查找(也用于反向操作)建议的相同逻辑正在完美运行。我希望如果我有特权给你赏金:)
猜你喜欢
  • 2018-02-09
  • 2011-11-14
  • 2015-06-01
  • 1970-01-01
  • 2012-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多