将自定义迁移限制为一个模型

时间:2019-11-12 08:02:04

标签: python django django-models django-migrations

我决定为我的网站实施注册选项,我使用了this tutorial(带有确认部分的注册)。按照此材料,我创建了Profile模块来保存一些信息。现在一切正常(似乎正在运行),但是问题在于旧的配置文件会引发relatedObjectDoesNotExist错误。根据这两个问题(firstsecond),我需要进行迁移以为旧用户帐户创建配置文件。我尝试按照答案之一的建议遵循此doc,但是随后尝试运行迁移时出现以下错误:KeyError: ('stv', 'bazinekaina')

stv是我的应用程序的名称,bazinekaina是我需要创建配置文件的模型之后的下一个模型的名称。

如何将迁移仅限于第一个模型?

我相关的models.py代码:

    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        email_confirmed = models.BooleanField(default=False)
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
        email = models.EmailField(max_length=254)

    @receiver(post_save, sender=User)
    def update_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.get(user=instance)
        instance.profile.save()

#next model, this one throws an error, despite the fact it should not be touched at all
class BazineKaina(models.Model):
    #bazines kainos modelis

    bazka = models.DecimalField(max_digits=5, decimal_places=2)

    data = models.DateField(auto_now=False, auto_now_add=True)

    def __str__(self):
        return str(self.bazka)

    class Meta:
        verbose_name_plural = "Bazinė kaina"
        get_latest_by = 'data'

使用名为python manage.py makemigrations --empty stv的{​​{1}}命令创建的迁移文件:

0001_initial.py

如何以及如何解决阻止迁移应用到不相关的模型(并引发错误)?

很抱歉,这是一个基本问题,但是整个django对我来说仍然很新。

1 个答案:

答案 0 :(得分:1)

如果您的迁移名为0001_initial,则意味着您没有实际为概要模型创建表的迁移。

删除该迁移并运行:

python manage.py makemigrations stv
python manage.py makemigrations stv --empty --name create_profiles

这时,您应该有一个文件0002_create_profiles.py,并使用逻辑在此处创建配置文件。