import os def dynamic_upload_to(prefix, field_name_func): def wrapper(instance, filename): ext = filename.split('.')[-1] field_name = field_name_func(instance) if prefix == 'user': filename = f'{instance.nickname}-{field_name}.{ext}' else: filename = f'{instance.id}-{field_name}.{ext}' return os.path.join(prefix, filename) return wrapper def file_delete(obj, field): getattr(obj, field).delete(save=False) setattr(obj, field, None) obj.save(update_fields=[field])