Adding a new ForeignKeyField to an existing model gives an error
Peewee does not have any automatic schema migration when you change a model definition. You can write migrations quite easily using the playhouse extension:

http://docs.peewee-orm.com/en/latest/peewee/playhouse.html#migrate

Do I understand correctly that you're describing:

1. changed your model definition
2. ran `create_tables()`
3. table already existed, but then the index is attempted to be added
4. error occurs because the column does not exist

If that's the case then I'd propose this isn't a bug, but rather that you should migrate your schema up beforehand. That's right, indeed by migrating the schema before anything (including creating any new tables beforehand), the create_tables() thing will when work correctly. Thanks!
I've noticed that, when you add a new field to an already existing model, it will try to do all steps to create a table:

1. create sequences
2. create table (proper)
3. create indexes

However, the "safe" parameter will make sure that the schema of the table itself will not be changed (after all, the table exists). As a result, the new field will not be created. The migrator does a good job creating the fields that you need.

But, if the field is a ForeignKeyField, it will try to create an index for that field (step 3 above). Because the field was not created on step 2, we will have an SQL error about a non-existing field.

Maybe there should be a check if the field exists before trying to create the index. Because it is a new field that will be dealt by the migration steps (using the SchemaMigrator), the index creation should also be done at around this moment.