django:如何停止创建新的主键保存(using =)

|| 在Django中,我想将数据从一个db中的相同表复制到另一个db-从\'db01 \'到\'default \'。模式是相同的。
>>> a=Household.objects.filter(h_identifier=\'H122000-48\').using(\'db01\')
>>> a[0].pk
>>> u\'451465ea-0137-11e0-879a-70f1a16e0f80\'
>>> a[0].save(using=\'default\')
>>> b=Household.objects.filter(h_identifier=\'H122000-48\').using(\'default\')
>>> b[0].pk
>>> u\'7c2484fe-8641-11e0-b080-00188b4d6b0e\'
它可以工作,但插入\'default \'中的记录的主键与从\'db01 \'中获取的键不同。为了保持与其他表的完整性,pk不得更改。 django docs部分“选择要保存的数据库”建议,由于实例“ a”已具有主键,因此在将新记录插入“ default”时将使用相同的主键。我无法做到这一点。 有谁知道这可以做到吗?提前致谢!! (这似乎是一个奇怪的设置,但是该应用程序白天在断开连接的上网本上独立运行,并且在所有上网本都停靠的夜晚将数据合并到主数据库中。我可以在mysql中做得很好,但想尽可能使用Django ORM。)     
已邀请:
我知道这是一段时间前的事,但是今天我遇到了同样的问题-从您使用的密钥来看,您的id字段是django_extensions中的UUIDField类型吗? 这有点漏洞,因为pre_save信号将始终确保替换密钥,而不管是否已经存在。对其进行子类化并替换pre_save函数即可对其进行修复。
class FixedUUIDField(UUIDField):
def pre_save(self, model_instance, add):
    value = super(UUIDField, self).pre_save(model_instance, add)
    if self.auto and add and not value:
        value = unicode(self.create_uuid())
        setattr(model_instance, self.attname, value)
    return value
    
django文档建议使用\'force_insert \':   第二种选择是使用   使用force_insert选项将save()保存到   确保Django执行SQL INSERT:                           p =人员(名称= \'Fred \')         保存(使用= \'first \')         p.save(using = \'second \',force_insert = True)这将确保         叫弗雷德的人将有         两者上的相同主键         数据库。如果那个主键是         尝试保存时已在使用中         到第二个数据库,出现错误         将被提出。                    

要回复问题请先登录注册