我有两个数据库:
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 不支持跨数据库关系。
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/