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.