将同一对象两次添加到 ManyToManyField

2023-11-24

我有两个 Django 模型类:

class A(models.Model):
     name = models.CharField(max_length = 128)    #irrelevant

class B(models.Model):
     a = models.ManyToManyField(A)
     name = models.CharField(max_length = 128)    #irrelevant

我想做的是:

a1 = A()
a2 = A()
b = B()

b.a.add(a1)
b.a.add(a1)    #I want to have a1 twice
b.a.add(a2)

assert len(b.a.all()) == 3 #this fails; the length of all() is 2

我猜测 add() 使用了一组语义,但我怎样才能规避它呢?我尝试研究自定义管理器,但我不确定这是否正确(看起来很复杂)...

提前致谢!


我认为你想要的是使用中介模型来形成 M2M 关系throughManyToManyField 中的关键字参数。有点像上面的第一个答案,但更“Django-y”。

class A(models.Model):
    name = models.CharField(max_length=200)

class B(models.Model):
    a = models.ManyToManyField(A, through='C')
    ...

class C(models.Model):
    a = models.ForeignKey(A)
    b = models.ForeignKey(B)

当使用through关键字,通常的 M2M 操作方法不再可用(这意味着add, create, remove,或赋值给=操作员)。相反,您必须创建中介模型本身,如下所示:

 >>> C.objects.create(a=a1, b=b)

但是,您仍然可以对包含以下内容的模型使用常用的查询操作:ManyToManyField。换句话说,以下内容仍然有效:

 >>> b.a.filter(a=a1)

但也许更好的例子是这样的:

>>> B.objects.filter(a__name='Test')

只要中间模型上的 FK 字段没有指定为unique您将能够使用相同的 FK 创建多个实例。您还可以通过添加您喜欢的任何其他字段来附加有关关系的其他信息C.

中介模型已记录here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将同一对象两次添加到 ManyToManyField 的相关文章

随机推荐

  • (405 Method Not allowed)响应 Google 代码提交期间的 MKACTIVITY

    我已将代码上传到 code google 并成功提交了两次 但现在当我尝试提交代码时 它总是给出 Server sent unexpected return value 405 Method Not Allowed in response
  • 如何在 Visual Basic 中声明全局变量?

    我想创建一个可以跨多种表单使用的变量 它将成为整数的临时存储位置 在 VB 中 有多种方法可以实现此目的 一种 VB 特定的方法和一种非 VB 特定的方法 即也可以在 C 中实现的方法 VB 特有的方法是创建一个模块并将变量放置在模块中 P
  • 为什么可以创建 COM 接口的新实例?

    我对 COM 和 coclass 没有太多背景 所以我不太明白为什么我可以使用new具有接口的操作员 从与语言 框架无关的角度来看 为什么它能正确编译和运行是令人困惑的 using Microsoft Office Interop Exce
  • intelliJ idea 10 社区版和 GWT 插件

    安装 GWT 插件遇到困难 尝试搜索 GWT 插件 我所能找到的只是 GWT Imagebundle 它已经非常过时了 尝试了 文件菜单 gt 配置插件 但没有帮助 因为插件尚未安装 intelliJ 10 社区版是否支持 GWT 插件 如
  • Angular2 - Http POST 请求参数

    我正在尝试发出 POST 请求 但无法使其正常工作 testRequest var body username myusername password mypassword var headers new Headers headers a
  • css3 webkit动画停止在div上:悬停

    我尝试使用 webkit animation 和 webkit keyframes 制作动画 我有一个 div 动画 里面有子 div 当我的鼠标位于孩子上方时 我会停止父母的 webkit 动画 有例子吗 Thanks 不幸的是CSS中没
  • Linux 上的 openSSL 证书验证 [关闭]

    Closed 这个问题是无关 目前不接受答案 JKJS 我有这个证书链 cert pem self signed gt cert pem gt cert pem 所有三个证书都是我生成的 任何地方都没有使用互联网连接 这是完美的离线工作 现
  • XSS 安全。来自同一域的 2 个 iframe 之间的通信

    域 abc com 有一个包含 2 个 iframe 的页面 它们都是从域 xyz com 加载的 XSS 安全性是否会阻止这两个 iframe 之间的 JavaScript 访问 通信 交互 嗯 这取决于你所说的沟通是什么意思 似乎某种类
  • 访客设计模式-返回类型

    我使用访客设计模式来解决我们系统中的问题之一 作为如何实现它的参考 我使用了工厂现场 and 这个 YouTube 视频 在 DoFactory 示例中 访问者使用返回类型为 void 的方法 而在 YouTube 视频中 作者使用 dou
  • 将代码从 Mathematica 复制到其他平台的已知问题?

    我刚刚注意到 如果你在 MMA 8 0 1 win7 64 中有这个 然后你将它复制到SO 只需ctrl c ctrl v 你会得到这个 maxY minY stepy maxX minX stepx 这是数学上不等价 应该是这样的 max
  • AVCaptureSession 收到内存警告并无故崩溃

    我正在开发一个处理高清照片的应用程序 我正在使用 AVCaptureSession 拍照 停止它 然后对该照片应用效果 让我疯狂的是 一切都运行良好 仪器告诉我 我正确且按时地释放了我使用的所有内存 是的 它确实很高 有时达到 100mb
  • 为什么 Xcode 构建配置的精确副本会失败?

    我有一个react native具有桥接 Swift 代码的应用程序 可以使用 Xcode 毫无问题地构建 运行和存档10 0使用默认的Release and Debug构建配置 我用Xcode gt Product gt Archive或
  • 如何叠加不同单元格的图?

    在我笔记本的一个单元格中 我已经用以下内容绘制了一些内容 myplot plt figure plt plot x y 现在 在不同的单元格中 我想再次绘制完全相同的图形 但在其顶部添加新的图形 类似于两次连续调用所发生的情况 plt pl
  • 角度材质 - 更改单击的垫列表选项的颜色

    是否可以更改选中复选框的默认颜色 mat pseudo checkbox checked
  • preg_match_all() [function.preg-match-all]: 未知修饰符 ']'

    使用了几种不同的模式 但它们都出现了这个错误 那么出了什么问题呢 我要诊断的最短的一个是 pattern
  • 为什么使用“*”构建视图不好?

    为什么使用 构建视图不好 假设您有一个复杂的联接 并且所有字段都可能在某处使用 然后您只需选择所需的字段即可 SELECT field1 field2 FROM aview WHERE 视图 aview 可以是SELECT table1 t
  • 不需要导出仅包含虚拟/内联函数的类?

    在 Win32 上的 C 中 假设我有一个带有声明类的头文件的 DLL DLL 导出一些获取该类实例的指针 引用的方法 例如工厂函数 我是否正确地认为 如果只在其实例上调用虚拟或内联函数 则无需使用 declspec 将该类标记为导出 相反
  • 导入错误:无法导入名称 _imaging

    我安装了Pillow 然后我想做 from PIL import Image 我收到以下错误 Traceback most recent call last File
  • 如何在 MySQL 中搜索嵌套 JSON

    我使用 MySQL 5 7 和本机 JSON 数据类型 样本数据 code 2 stores code 100 quantity 2 code 200 quantity 3 code 4 stores code 300 quantity 4
  • 将同一对象两次添加到 ManyToManyField

    我有两个 Django 模型类 class A models Model name models CharField max length 128 irrelevant class B models Model a models ManyT