我正在使用的代码中有各种ManyToMany关系。设置基本上像:
class Account(models.Model):
name = models.CharField(max_length=32, unique=True)
roles = models.ManyToManyField('Role', related_name='accounts')
class Role(models.Model):
name = models.CharField(max_length=32, unique=True)
所以,在shell中玩这个设置我得到了:
>>> Account.objects.all()
[<Account: Account name:"Account 1">]
>>> Role.objects.all()
[<Role: Role name:"Role 1">, <Role: Role name:"Role 2">]
>>> a = Account.objects.get(name='Account 1')
>>> a.roles.all()
[<Role: Role name:"Role 1">]
>>> r = Role.object.get(name='Role 2')
>>> r.accounts.all()
[]
>>> a.roles.add(r)
>>> a.roles.all()
[<Role: Role name:"Role 1">]
>>> r.accounts.all()
[]
使用add函数不会更新相应的Account / Role对象。但是,如果我从数据库重新调整对象:
>>> a = Account.objects.get(name='Account 1')
>>> a.roles.all()
[<Role: Role name:"Role 1">, <Role: Role name:"Role 2">]
>>> r = Role.object.get(name='Role 2')
>>> r.accounts.all()
[<Account: Account name:"Account 1">]
现在,事情已正确更新。
在正确的文件中运行代码时,我遇到了同样的问题。
该项目正在使用Django 1.8,从its many-to-many documentation开始,看起来这种行为不应该发生....
当我尝试在不同的项目上复制此行为时,我无法做到,所以我猜测项目是以某种方式设置来导致此行为。是否有变量或库或其他原因造成这种情况?