Django: Как зависеть от внешнего идентификатора, который можно переключать? - PullRequest
0 голосов
/ 09 сентября 2018

Рассмотрим следующий сценарий:

Наши объекты базы данных Django должны полагаться на идентификаторы, предоставляемые внешней службой A (ESA) - это потому, что мы используем этот идентификатор для извлечения информации об объектах, которые еще не созданы, из внешнего напрямую. ESA может вскоре отключиться, поэтому мы также извлекаем информацию об этих же объектах из внешней службы B (ESB) и сохраняем их как запасной вариант.

Поскольку на эти идентификаторы в значительной степени влияют представления и URL-адреса, идеальным сценарием было бы использование @property:

@property
dynamic_id = ESA_id

И затем, если ESA выключается, мы можем легко переключиться, изменив dynamic_id на ESB_id. Однако проблема заключается в том, что свойства нельзя использовать в фильтрах наборов запросов и других сценариях, что также необходимо в этом случае.

Моя текущая идея - просто сохранить ESA_id, ESB_id и dynamic_ID как обычные поля отдельно и назначить dynamic_ID = ESA_id, а затем, в случае отключения ESA, просто перейти по объектам и выполнить dynamic_ID = ESB_id.

Но я чувствую, что должен быть лучший путь?

1 Ответ

0 голосов
/ 09 сентября 2018

Наличие полей ESA_id и ESB_id в одной таблице является хорошим решением, тогда у вас есть какая-то настройка (DEFAULT_SERVICE_ID = 'ESA_id' | 'ESB_id'), и ваш код изменяет поиск на основе этой опции.

Здесь вы можете увидеть подход к динамическому созданию фильтров. https://stackoverflow.com/a/310785/1448667

...