Имбирь - твой спиритический овощ. Войти !bnw Сегодня Клубы

В django-rest-framework есть готовая аутентификация по токенам, но в модели токен связывается с юзером как OneToOneField (создаётся unique constraint). Для моей задачи нужна связь ForeignKey, чтобы с разных устройств у юзера был отдельный токен со своим временем жизни.

Как на лету пропатчить одну модель в drf?
В джанге у метакласса модели есть Model.add_to_class('fieldname', field), которым можно добавлять/изменять поля в уже описанных классах моделей, но заменить OneToOneField на ForeignKey им не получается, появляются конфликты (или надо пытаться лучше?).
Лезть самому в Model._meta.local_fields страшновато, там кроме полей ещё много магии с созданием связей между моделями.
Чому нет готового метода "удолить филд полностью со всеми ссылками", чтобы затем добавить новый без конфликтов? Остаётся фолбек "скопировать drf целиком в свой проект и там заменить тип поля", но очень уж некрасиво.

#6V11NT / @kogda / 2840 дней назад

- ебани новое поле - перенеси туда ссылки - удали старое - переименуй новое
#6V11NT/0J9 / @anarchy / 2840 дней назад
@anarchy сорь, не понял вопроса
#6V11NT/C7J / @anarchy --> #6V11NT/0J9 / 2840 дней назад

@anarchy >удали старое
боялся что-нибудь проебать, но вроде работает просто удаление и создание нового поля с таким же именем без переназначения ссылок (они ссылаются на имя, которое осталось прежним)
python
for field in Token._meta.local_fields[:]:
if field.name == 'user':
Token._meta.local_fields.remove(field)
Token.add_to_class('user', models.ForeignKey(AUTH_USER_MODEL, related_name='+',
on_delete=models.CASCADE, verbose_name=_('User')))

#6V11NT/WQ4 / @kogda --> #6V11NT/0J9 / 2840 дней назад
@kogda чет я не понял как это, если в БД были данные по полю, то после удаления все они похерятся если не скопировать
#6V11NT/7KS / @anarchy --> #6V11NT/WQ4 / 2840 дней назад

@anarchy проверил, не похерились. в миграции AlterField, а не дроп/криейт (джанговские миграции вообще не дропают поля на всякий случай, если я правильно помню).

#6V11NT/8K7 / @kogda --> #6V11NT/7KS / 2840 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.