Где поставить / как пересмотреть миграцию TokenAuthentication - PullRequest
0 голосов
/ 06 ноября 2019

Я добавляю 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

Как добавить к этому операцию (как здесь ) и откуда эта магическая миграция, я не вижу ее в моем контроле версий?

1 Ответ

0 голосов
/ 06 ноября 2019

Сначала позвольте мне сказать, что я отвечаю на свой вопрос, поэтому я не уверен, что это лучший способ сделать это, но мне кажется, что это логично.

Я обнаружил, чтоНеобходимая миграция была migrations/0002_auto_20160226_1747.py в пакете authtoken. Зная имя, я запустил миграцию в моей пользовательской модели (хотя это кажется немного отсталым), чтобы сгенерировать мои токены.

Моя миграция выглядела так, обратите внимание на 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),
    ]

...