首页 > 解决方案 > 在哪里放置/如何覆盖 TokenAuthentication 迁移

问题描述

我正在将 TokenAuthentication 添加到我们的 django 项目中,因为我们正在向已经建立的项目中添加一个 api。

DRF 文档中,我看到:

注意:确保在更改设置后运行 manage.py migrate。rest_framework.authtoken 应用程序提供 Django 数据库迁移。

我还看到要为我需要运行的现有令牌创建令牌:

for user in User.objects.all():
    Token.objects.get_or_create(user=user)

到目前为止还不错,但对我来说,现有用户的填充令牌需要在迁移中。

我在迁移时看到了迁移:

Applying authtoken.0001_initial... OK
Applying authtoken.0002_auto_20160226_1747... OK

我怎样才能向它添加一个操作(比如这里),这个神奇的迁移来自哪里,我在我的版本控制中看不到它?

标签: djangodjango-migrations

解决方案


首先让我说我正在回答我自己的问题,所以我不确定这是解决这个问题的最佳方式,但对我来说这似乎是合乎逻辑的。

我发现我需要的相关迁移位于migrations/0002_auto_20160226_1747.pyauthtoken 包中。知道了这个名字,我在我的用户模型中运行了一个迁移(虽然这看起来有点落后)来生成我的令牌。

我的迁移看起来像这样,请注意dependencies

from django.db import migrations, models


def create_missing_tokens(apps, schema_editor):
    """
    Tokens were added in 0002_auto_20160226_1747, we thus need to populate
    the tokens table for existing users
    """
    Token = apps.get_model('authtoken', 'Token')
    User = apps.get_model('accounts', 'CustomUser')
    for user in User.objects.all():
        Token.objects.get_or_create(user=user)


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        # depends on authtoken migration
        ('authtoken', '0002_auto_20160226_1747'),
        ('accounts', '0003_subscription_max_updates_per_day'),
    ]
    operations = [
        migrations.RunPython(create_missing_tokens, reverse_code=migrations.RunPython.noop),
    ]


推荐阅读