django - 如何在第二个数据库中保存 ManyToMany 字段

标签 django django-models

我有两个数据库:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(ROOT_PATH, 'db', 'sqlite.db'),
    },

    'slave': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(ROOT_PATH, 'db', 'slave.db'),
    }

}

我有一个包含 ManyToMany 字段的表:

from django.db import models
from django.contrib.auth.models import User

class Data(models.Model):
    xml     = models.TextField(max_length=90000)
    users   = models.ManyToManyField(User)

当我运行代码时:

for i in Data.objects.all():
    i.save(using='slave')

“默认”数据库中的所有条目都出现在“从属”中,没有 ManyToMany 字段用户。 我如何明确地将用户字段复制到“从属”数据库?

编辑:

我尝试了 Rohan 的建议:

for i in Data.objects.all():
    back_i = i
    # back_i.users.all().count() = 1
    i.save(using='slave')
    # back_i.users.all().count() = 0
    for u in back_i.users.all():
        i.users.add(u)

所以我认为解决方案就在附近,但不是在这里

最佳答案

django 不支持跨数据库关系。

摘自 cross database relations

Django 目前不支持外键或跨多个数据库的多对多关系。如果您使用路由器将模型分区到不同的数据库,则这些模型定义的任何外键和多对多关系必须在单个数据库内部。

但是,正如解释的here您可以实现 post_save 信号,让用户在 slave 数据库中拥有相同的用户记录。但是你必须保持数据库的一致性,例如从两个数据库中删除用户。

更新:要将 ManyToMany 保存在不同的数据库中,您可以试试这个

for i in Data.objects.all():
    back_i = i
    i.save(using='slave')
    for u in back_i.users.all():
        i.users.add(u)

关于django - 如何在第二个数据库中保存 ManyToMany 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14828831/

相关文章:

Django注册登录重定向

javascript - 在 OpenLayers 示例中调用 domtoimage.toPng() 时出现 "SecurityError: This operation is insecure"

python - 在 Django 中使用信号创建 feed

python - 如何将表单控件添加到 Django 表单?

Django 更新表单

python - Django - 模型字段定义 unicode

python - HyperlinkedModelSerializer 在 django rest 框架中使用 auth.User 抛出 ImproperlyConfigured 错误

python - Django匹配查询不存在

python - 在 Django DRF 中,我总是在序列化器的更新方法中收到 ValueError

python - Django用户ForeignKey和唯一对象名称