Migrator applies the same value from callable default
If it's a python callable what's peewee supposed to do... iterate every single row and update it? That would not work and would cause performance problems for users because it is unexpected.

If you want, you can use a sql function - sqlite lets you add user-defined functions quite easily - and even use them for column defaults. Alternatively, you can set it to some placeholder and then iterate every row if you're so inclined.
With value generator like

```python
def gen_nanoid():
    return nanoid.generate(size=12)
```

and migration definition:

```python
def add_permalink():
    field = CharField(max_length=20, default=gen_nanoid)
    migrate(
        migrator.add_column('quip', 'permalink', field)
    )
```

All rows in the table being migrated get the same value:

```console
$ sqlite3 db.sqlite 
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> select permalink from quip;
Ufwe7VZMiloN
Ufwe7VZMiloN
Ufwe7VZMiloN
Ufwe7VZMiloN
sqlite> 
```

This makes adding a column with unique constraint not possible without some hacking (add normal non-unique column with static default, update with unique values using raw SQL while iterating over rows, add unique index on new column).

Peewee 3.14.1 with SQLite (built-in module, Python 3.8.5).