Django:对象的ManyToMany添加/删除函数更新数据库但不是对象

时间:2016-02-02 00:32:30

标签: python django

我正在使用的代码中有各种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开始,看起来这种行为不应该发生....

当我尝试在不同的项目上复制此行为时,我无法做到,所以我猜测项目是以某种方式设置来导致此行为。是否有变量或库或其他原因造成这种情况?

0 个答案:

没有答案