Произвольная связь с полями другой модели Django?
Я пытаюсь построить систему уведомлений, которая может срабатывать на основе заданного пользователем порога в любом поле в другой модели. Модель Notification будет сохранять предпочтения пользователя в отношении порога и поля, к которому относится порог, в другой модели Report. Проблема здесь заключается в том, как сохранить Report имя поля так, чтобы Notification знал, к какому полю относится порог. В идеале это должно быть что-то вроде отношения ForeignKey, только сохраняется имя поля внешней модели, а не ее экземпляр. Моя идея состоит в том, чтобы сделать модель для хранения предпочтения уведомления, но я не знаю, как сохранить выбор пользователем модели другого поля:
class Report(models.model):
a = models.FloatField()
b = models.FloatField()
c = models.FloatField()
class Notification(models.model):
report = models.ForeignKey(Report)
threshold = models.FloatField(). # for example, Report.a > 30 triggers this notification, but could also be Report.b
threshold_field = ??? # this has to be a relationship to any field available in Report model (e.g. Report.a, Report.b, etc)
Я знаю, что можно сделать ForeignKey отношения к предопределенному полю с аргументом to_field, но этот параметр должен быть любым полем в Report. Моя идея - просто сохранить threshold_field как CharField и затем использовать функцию Python getattr при извлечении данных Report, но это не чисто и может сломаться, если имена полей в Report изменятся. Возможно, существует возможность переопределить метод save, но я не нашел способа, чтобы это работало.