我的Django manytomany字段都标记为唯一,有没有删除它的选项?

时间:2010-02-28 11:13:37

标签: django many-to-many manytomanyfield

鉴于这样的模型:

class A(models.Model):
    def __unicode__(self):
        return "%d"%self.id

class B(models.Model):
    a_set = models.ManyToManyField(A)

    def __unicode__(self):
        return "%d"%self.id

然后以下一系列操作演示了我的问题:

In [1]: a1=A()
In [2]: a1.save()
In [3]: a1
Out[3]: <A: 1>

In [4]: b1=B()
In [5]: b1.save()
In [6]: b1
Out[6]: <B: 1>

In [7]: b2=B()
In [8]: b2.save()
In [9]: b2
Out[9]: <B: 2>

In [10]: a1.b_set.add(b1)
In [11]: a1.b_set.all()
Out[11]: [<B: 1>]

In [12]: a1.b_set.add(b2)
In [13]: a1.b_set.all()
Out[13]: [<B: 1>, <B: 2>]

In [14]: a1.b_set.add(b2)
In [15]: a1.b_set.all()
Out[15]: [<B: 1>, <B: 2>]

最后,我想看到的是:

Out[15]: [<B: 1>, <B: 2>, <B: 2>]

2 个答案:

答案 0 :(得分:2)

您可以创建第三个表格:

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

我相信这将允许您在A和B的实例之间创建任意数量的关系。

答案 1 :(得分:0)

关系上下文中ManyToMany关系的定义是它表示两个原始空间的乘积子集上的函数。因此,对于每对实体,在M2M中存在至多一个关联该对的关系。

事实上,所有主要的ORM模式生成器都会在连接表上创建复合PK或UniqueKey,以强制执行此操作。

如果你想跳过这个,你必须避免使用ManyToMany,并使用显式表来进行连接。