deleteprofilefield.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.contrib.auth import get_user_model
  2. from django.core.management.base import CommandError, BaseCommand
  3. from misago.core.pgutils import chunk_queryset
  4. UserModel = get_user_model()
  5. class Command(BaseCommand):
  6. help = "Deletes specified profile field from database."
  7. def add_arguments(self, parser):
  8. parser.add_argument(
  9. 'fieldname',
  10. help="field to delete",
  11. nargs='?',
  12. )
  13. def handle(self, *args, **options):
  14. fieldname = options['fieldname']
  15. if not fieldname:
  16. self.stderr.write("Specify fieldname to delete.")
  17. return
  18. fields_deleted = 0
  19. queryset = UserModel.objects.filter(
  20. profile_fields__has_keys=[fieldname],
  21. )
  22. for user in chunk_queryset(queryset):
  23. if fieldname in user.profile_fields.keys():
  24. user.profile_fields.pop(fieldname)
  25. user.save(update_fields=['profile_fields'])
  26. fields_deleted += 1
  27. self.stdout.write(
  28. '"{}" profile field has been deleted from {} users.'.format(
  29. fieldname, fields_deleted
  30. )
  31. )