Как добавить внешние ключи в историю полей Django?

#django

#django

Вопрос:

Я пытаюсь отслеживать внешние ключи с помощью django-field-history, но когда я добавляю его, он выполняет дополнительные запросы на каждой странице, используя модель

Например

 from field_history.tracker import FieldHistoryTracker

class Author(models.Model):
    user = models.ForeignKey('auth.user)
    field_history = FieldHistoryTracker(['user'])
  

всегда будет выдавать больше запросов на страницах с использованием Author, например

 SELECT ••• FROM "auth_user" WHERE "auth_user"."id" = '2'
  1239 similar queries.   Duplicated 1235 times.
  

Я пробовал использовать user_id вместо user в Field History Tracker, но он всегда возвращает None. Используя user.id или что-нибудь подобное, это просто возвращает ошибку.

Мне действительно нужно сохранить эти данные истории, но не ценой тысяч дополнительных запросов.

Кроме того, мне бы очень понравилось сохранять django-field-history, поскольку ее использует вся моя база данных, но я знаю, что мне, возможно, придется переключить пакет, и если да, то какой бы вы посоветовали?

Ответ №1:

Насколько я понимаю, вы пытаетесь зарегистрировать, какой пользователь обновил, для этого вы должны использовать _field_history_user как описано в документации. Например:

 class Pizza(models.Model):
    name = models.CharField(max_length=255)
    updated_by = models.ForeignKey('auth.User')

    field_history = FieldHistoryTracker(['name'])

    @property
    def _field_history_user(self):
        return self.updated_by
  

Всегда будет обновляться, какой пользователь обновил строку для этой таблицы.

Комментарии:

1. Возможно, мой пример был не самым лучшим. Мой пользователь поля — это не тот, кто обновил, а редактируемое поле. Допустим, я перевожу своего автора 1 в пользователя 1, затем переключаю его на пользователя 2, затем обратно на пользователя 3, я хочу видеть все изменения в моем трекере