Каковы альтернативы использованию сигналов Django? - PullRequest
0 голосов
/ 11 февраля 2019

Я работаю над проектом, в котором мне нужно пересчитать значения, основываясь на том, изменились ли поля или нет.Вот пример:

Model1:
    field_a = DatetimeField()

    calculated_field_1 = ForeignKey(Model2)

Model2:
    field_j = DatetimeField()

Если field_a изменяется на model1, я должен пересчитать значение для поля selected_field_1, чтобы увидеть, нужно ли его также изменить.Выполненные вычисления требуют, чтобы я запросил базу данных для проверки значений других моделей и затем определил, нужно ли изменить значение вычисляемого поля.

Пример) field_a изменится, тогда мне придется выполнить этот расчет

result = Model2.objects.filter(field_j__gte=Model1.field_a)
If result.exists():
    Model1.field_a = result.first()
Model1.save(update_fields=(‘field_a’,))

Это самый простой пример, который я мог придумать, и запросы могут быть гораздо более сложными, чем эта.

Проект начался с одного вычисления, когда поле изменилось, поэтому я решил лучшийподход был использовать сигналы Джанго.Месяцы спустя требования к проекту изменились, и теперь мне пришлось выполнить несколько других вычислений, которые очень похожи на пример выше.Я заметил, что моя функция post_save выходит из-под контроля, и мне просто интересно, какие есть альтернативы использованию сигналов.Хотя вычисления post_save, которые я сейчас делаю, занимают гораздо меньше полсекунды, ради моего вопроса делают вид, что они заняли секунду или больше.

Действительный ответ не может включать в себя выполнение этих расчетов на лету, когда я извлекаю их из БД.Мы используем систему проверки, которая требует, чтобы я установил эти значения в модели, и запрос на лету был подходом, который мы пытались, но по причинам производительности он не был жизнеспособным.Кроме того, при смене поля одно из требований заключается в том, что пользователь должен видеть результаты вычисляемого поля, поэтому это должно происходить синхронно.

Какие существуют альтернативные подходы к использованию этого шаблона?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...