Home > front end >  Django fixture append to existing data
Django fixture append to existing data

Time:08-03

I have a table which contains some data already. Can a fixture be created with new data records and be appended to the existing data in the table, without specifying a pk explicitly?

CodePudding user response:

If you want to use fixtures, you can create a Migration file in the corresponding app:

from django.db import migrations, models


def add_fixtures(apps, schema_editor):
    Model = apps.get_model("app_name", "model_name")  # You must replace app_name and model_name with your values
    db_alias = schema_editor.connection.alias
    # Now you can create some instances like this (you can omit the pk):
    Model.objects.using(db_alias).create(**your_data)


def remove_fixtures(apps, schema_editor):
    # Reverses the action (needed for compatibility)
    Model = apps.get_model("app_name", "model_name")  # You must replace app_name and model_name with your values
    db_alias = schema_editor.connection.alias
    # Now you must delete the instances you created earlier, for example:
    Model.objects.using(db_alias).filter(id=1).delete()


class Migration(migrations.Migration):
    dependencies = [
       # You must insert the last migration of the app, for example: ('app_name', '000x_migration_name')
    ]
    
    operations = [
       migrations.RunPython(add_fixtures, remove_fixtures)
    ]

Otherwise you could simply creates new records with a script and run it in the console:

# First obtains your data from a dictionary or maybe parsing a file (you can omit the pk)
data_list = [{'example': 1}, {'example': 2}]

for data in data_list:
   YourModelName.objects.create(**data)  # You must replace YourModelName with the name of your model

Finally you could also use SQL to insert the data directly into the database.

  • Related