1.Внешние ключи стоит делать от "подчиненных" к "главным" т.е. поскольку промокод принадлежит юзеру, вокруг которого и построена система, то и ключ нужно делать в PromocodeModel.
2. Не понятно, что делает функция Promo в
default=str(Promo(10))
Как мне при создании этого объекта юзер, создавать еще и объект Промокод, и прописывать этот промокод в подно из полей юзера?
3. Зачем раздувать базу лишними полями с данными? Продублированный промокод несет какую-то смысловую нагрузку помимо того, что не нужно добавлять поиск по отдельной таблице? Нет? Тогда смело удаляйте одно из мест хранения, т.к. это избыточность данных.
4. Как создавать?
В случае, если оставили поле в модели юзера, то просто генерируйте его "по умолчанию" (Предположу, что именно этим
default=str(Promo(10)
) и занималась)
В случае с отдельной моделью просто создавайте новый объект
как обычно