deleteprofilefield.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334
  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. User = 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("fieldname", help="field to delete", nargs="?")
  9. def handle(self, *args, **options):
  10. fieldname = options["fieldname"]
  11. if not fieldname:
  12. self.stderr.write("Specify fieldname to delete.")
  13. return
  14. fields_deleted = 0
  15. queryset = User.objects.filter(profile_fields__has_keys=[fieldname])
  16. for user in chunk_queryset(queryset):
  17. if fieldname in user.profile_fields.keys():
  18. user.profile_fields.pop(fieldname)
  19. user.save(update_fields=["profile_fields"])
  20. fields_deleted += 1
  21. self.stdout.write(
  22. '"%s" profile field has been deleted from %s users.'
  23. % (fieldname, fields_deleted)
  24. )