0096_interface_ordering.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from django.db import migrations
  2. import utilities.fields
  3. import utilities.ordering
  4. def _update_model_names(model):
  5. # Update each unique field value in bulk
  6. for name in model.objects.values_list('name', flat=True).order_by('name').distinct():
  7. model.objects.filter(name=name).update(_name=utilities.ordering.naturalize_interface(name))
  8. def naturalize_interfacetemplates(apps, schema_editor):
  9. _update_model_names(apps.get_model('dcim', 'InterfaceTemplate'))
  10. def naturalize_interfaces(apps, schema_editor):
  11. _update_model_names(apps.get_model('dcim', 'Interface'))
  12. class Migration(migrations.Migration):
  13. dependencies = [
  14. ('dcim', '0095_primary_model_ordering'),
  15. ]
  16. operations = [
  17. migrations.AlterModelOptions(
  18. name='interface',
  19. options={'ordering': ('device', '_name')},
  20. ),
  21. migrations.AlterModelOptions(
  22. name='interfacetemplate',
  23. options={'ordering': ('device_type', '_name')},
  24. ),
  25. migrations.AddField(
  26. model_name='interface',
  27. name='_name',
  28. field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface),
  29. ),
  30. migrations.AddField(
  31. model_name='interfacetemplate',
  32. name='_name',
  33. field=utilities.fields.NaturalOrderingField('target_field', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface),
  34. ),
  35. migrations.RunPython(
  36. code=naturalize_interfacetemplates,
  37. reverse_code=migrations.RunPython.noop
  38. ),
  39. migrations.RunPython(
  40. code=naturalize_interfaces,
  41. reverse_code=migrations.RunPython.noop
  42. ),
  43. ]