问题是您无法将主键 (ID) 从试用版传输到生产数据库,不是吗?所以2个解决方案:
1)坦克杀死蚂蚁
您对试用数据库执行 SQL 导出,并将每个主键和外键增加一个数字(例如:10000)。当您将其导入数据库时,此数字需要足够高以避免违反唯一性约束
2) 智能解决方案
当且仅当您的模型设计良好:对于每个模型,您都可以找到一组列,这些列可以作为 ID 的替代主键。如果您有带有 的属性unique = True
,或者带有它的模型,unique_together = (...)
那就完美了:您可以使用自然键!
在源代码的每个模型中,添加方法get_by_natural_key
:
class Person(models.Model):
firstname = models.CharField...
last_name = models.CharField...
class Meta:
unique_together = ("first_name", "last_name")
def get_by_natural_key(self, first_name, last_name):
return self.get(first_name=first_name, last_name=last_name)
然后您可以使用 Django dumpdata 命令导出试用数据库,并将 ID 替换为自然键!然后使用相同的代码,使用loaddata 命令导入这些数据文件。