Djongo RunPython при миграции базы данных

Есть приложение django с djongo в качестве драйвера базы данных. Я хочу добавить пользовательскую миграцию, используя RunPython. Но я не могу понять, как связаться с клиентом pymongo. Вот код:

from django.db import migrations


def _custom_migration(apps, schema_editor):
    db = ... # what to put here?
    db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])


class Migration(migrations.Migration):
    operations = [
        migrations.RunPython(_custom_migration),
    ]

из документации https://pymongo.readthedocs.io/en/stable/tutorial.html попробуйте следующее:

from pymongo import MongoClient

def _custom_migration(apps, schema_editor):
    client = MongoClient('localhost', 27017)
    db = client.test_database
    db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])

Вы можете связаться с PyMongo:

  • client (MongoClient экземпляр) from schema_editor.connection.client_connection.
  • db (Database экземпляр) from schema_editor.connection.connection.
def _custom_migration(apps, schema_editor):
    db = schema_editor.connection.connection
    db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])

Ссылки на источники:

Чтобы получить клиент PyMongo в приложении Django с Djongo в качестве драйвера базы данных, вы можете использовать пакет djongo для подключения к базе данных:

from django.db import migrations from djongo import DjangoClient

def _custom_migration(apps, schema_editor):
    client = DjangoClient()
    db = client['database_name']
    db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])


class Migration(migrations.Migration):
    operations = [
        migrations.RunPython(_custom_migration),
    ]

Здесь client - это клиент PyMongo, а db - экземпляр базы данных PyMongo. Имя базы данных указывается в части ['database_name'].

Вернуться на верх