gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:21:10 25 4
gpt4 key购买 nike

我有两个数据库:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com