Django ManyToMany 按集合大小或集合中的成员进行过滤

2024-01-05

我在用django维护消息数据库。
除其他外,我有以下内容models:

class User(models.Model):
    id = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=10)

class Message(models.Model):
    id = models.IntegerField(primary_key=True)
    body = models.CharField(max_length=200)
    users = models.ManyToManyField(User)

我正在尝试编写一个实用方法,对于给定用户,该方法可以向我提供与他(以及他本人)相关的消息。

即对于:

m1 = Message(id=1, body='Some body')
m1.save()
m2 = Message(id=2, body='Another body')
m2.save()
m3 = Message(id=3, body='And yet another body')
m3.save()

u1 = User(name='Jesse James')
u1.save()
u2 = User(name='John Doe')
u2.save()

m1.users.add(u1, u2)
m2.users.add(u1)
m3.users.add(u2)

getMessagesFor('Jesse James')

只会返回m2.
假设我有user正确的模型实例,它归结为一行,我已经尝试过以下这些:

    user.message_set.annotate(usr_cnt=Count('users')).filter(usr_cnt__lte=1)

Or:

    messages = Message.objects.filter(users__id__in=[user.id])

And:

    messages = Message.objects.filter(users__id__exact=user.id)

And:

    messages = Message.objects.filter(users__contains=user)

等等...我总是两者兼而有之m2 AND m1.
尝试过注释、排除、过滤等。

有人可以帮我弄这个吗?


qs = Message.objects.annotate(cc=Count('users')).filter(cc=1)

上述查询将返回仅与单个用户关联的所有消息。

要按用户过滤,请在末尾添加另一个过滤器以根据用户过滤带注释的查询:

qs = Message.objects.annotate(cc=Count('users')).filter(cc=1).filter(users__id=user.id)
# if user user.id=1, this will return only m2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django ManyToMany 按集合大小或集合中的成员进行过滤 的相关文章

随机推荐

  • Tensorflow Keras 错误:未知的图像文件格式。需要 JPEG、PNG、GIF、BMP 之一

    我正在训练一个分类器 并确保所有图片都是 jpg 但仍然出现此错误 InvalidArgumentError 未知的图像文件格式 需要 JPEG PNG GIF BMP 之一 节点解码图像 解码图像 IteratorGetNext 操作 i
  • Swift 数组(重复:,计数:)行为

    为什么只有一个元素labels数组显示为子视图view 特别是当使用Array repeating count let labels Array repeating UILabel count 7 print labels count 7
  • 在应用程序之间发送信息

    再会 我有一个客户端应用程序 它将客户端打开的应用程序列表发送到服务器 它特别发送文件路径 文件名和主机名 我的问题是发送的数据在服务器接收时应该进行序列化和反序列化 我是 C 新手 所以我对序列化知之甚少 这是客户端 private Li
  • 如何获取客户/用户位置详细信息

    在我的应用程序中 我想跟踪客户端 用户位置以存储在数据库中 我正在使用此代码来获取用户 IP 地址 string VisitorsIPAddr string Empty if HttpContext Current Request Serv
  • Python 中从十六进制到补码

    有没有一种简单的方法可以在 python 中生成补码 例如 如果您采用十六进制值0x9E 我需要将其转换为0x61 我需要将二进制 1 替换为 0 将 0 替换为 1 感觉这个应该很简单 只需使用异或运算符 http docs python
  • 静态工具操作的静态类与静态结构?

    我需要创建一个仅包含静态方法的 工具 类或结构 对于具有 PHP 背景的人来说 结构实际上并不存在 我正在读这个为什么选择结构而不是类 https stackoverflow com questions 24232799 why choos
  • Javascript window.onload 无法在 iOS 强制门户/网络中工作

    我在 jsp 文件的标头中有这段代码 由于某种原因 它在桌面和移动浏览器上运行良好 但在 iOS 强制门户上 仅触发第一个警报 有谁知道为什么 我想到了 使用这个作品
  • REST API 中的查询参数可以是强制的吗[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个要求 规定必须有两个参数 其中一个代表日期 作为 GET URI 的一部分必须是强制性的 但这两个参数仅用于过滤目的 所以我的问题是 强
  • 禁用移动 Chrome 浏览器中的滑动手势

    移动版 Chrome IOS Android 有一个功能 如果您在屏幕的左侧或右侧边缘滑动 它会更改选项卡 我的网络应用程序使用滑动 而这个 功能 似乎只是妨碍 有办法禁用这个吗 不 没有办法禁用此手势 有一张请求该功能的票证位于https
  • JavaScript:递归查找树中元素的所有父级

    我有一棵这样的树 var datas tree name name1 tree name name2 name name3 name name4 tree name name5 name name6
  • 是否可以调整 PDFBOX 中的文本?

    PDFBOX API 中是否有任何功能可以使文本对齐 或者我们必须手动执行此操作 如果手动 那么如何使用java 其背后的逻辑 调整文本 这个较旧的答案 https stackoverflow com questions 19635275
  • iOS:reachabilityWithHostname YES,尽管它应该是NO

    我测试了不同的框架 例如 https github com tonymillion Reachability https github com tonymillion Reachability https github com Vertic
  • Commons Logging 优先级最佳实践

    这可能是一个纯粹主观的问题 如果没有组织试图标准化这个问题 但我的团队在这个问题上的挣扎比你想象的要多 我们使用 Apache Commons Logging 作为日志记录接口 并且我们的开发团队中优先级的使用通常不一致 例如 一些开发人员
  • 具有多参数的htaccess

    我正在尝试像这样重定向我的链接 我的链接 example com p users page 2我的网址应该是 example com users page 2 此时 我的 mod rewrite 正在处理 我的链接 example com
  • NSMutabledata byteswithnocopy 的问题[重复]

    这个问题在这里已经有答案了 我正在尝试编写代码来从 malloced 缓冲区创建 NSMutableData 我使用了 freewhendone YES1 创建 NSData 后访问缓冲区时出错 在下面代码中的 memset 中 2 mal
  • 从 List 获取具有特定属性最大值的记录[重复]

    这个问题在这里已经有答案了 可能的重复 LINQ 如何对集合中所有对象的属性执行 Max 并返回具有最大值的对象 https stackoverflow com questions 1101841 linq how to perform m
  • .htaccess 重写到默认语言文件夹?

    我的网站按语言分为几个文件夹 en index php about us php faq php fr index php about us php faq php etc 我想要一个重写规则 自动重写到en如果有人试图进入文件夹mydom
  • “else if”比“switch() case”更快吗? [复制]

    这个问题在这里已经有答案了 我以前是 Pascal 人 目前正在学习 C 我的问题如下 下面的代码是否比进行切换更快 int a 5 if a 1 else if a 2 else if a 3 else if a 4 else 还有开关
  • 在Java中使用“==”[重复]

    这个问题在这里已经有答案了 public class Test public static void main String args String s1 HELLO String s2 HELLO System out println s
  • Django ManyToMany 按集合大小或集合中的成员进行过滤

    我在用django维护消息数据库 除其他外 我有以下内容models class User models Model id models IntegerField primary key True name models CharField