Django加载数据,带有自然键,与

2024-04-29 16:03:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个模型,ManyToManyField到{}。现在我想将数据从本地复制到生产环境。为了做到这一点,我希望将数据库中的所有条目转储到fixture中,并将其加载到生产服务器上。因为服务器已经包含数据,所以我使用自然键导出它们。导出运行得很好,但是如果一个实例引用了fixture中定义的同一模型的另一个实例的关系,那么在loaddata期间会出错。在

让我困惑的是:如果我不使用自然键,一切都很顺利。但这与已有的生产数据相冲突。在

请考虑以下示例:

from django.db import models


class PersonManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get(name=name)


class Person(models.Model):
    objects = PersonManager()

    name = models.CharField(max_length=150, unique=True)
    friends = models.ManyToManyField("self", blank=True)

    def natural_key(self):
        return self.name,

复制:

^{pr2}$

如果我省略了--natural-primary-natural-foreign,但遵循相同的步骤,那么加载到一个新的数据库中就可以了。在

有人能解释为什么会出现这种不同的行为吗?在


Tags: 数据实例name模型self服务器数据库get