DeserializationError: [''Значение "F(view_count) + Value(1)" должно быть целым числом''].

Я использую Django 3.2

Я использую значения F для увеличения значения поля (чтобы избежать потенциальных условий гонки).

Здесь приведен фрагмент моего кода (раздел, который выбрасывает исключение):

  def __update_fields(self, interaction_type):

        if interaction_type == Engagement.VIEW:
            self.view_count = F('view_count') + 1

Я получаю эту ошибку:

DeserializationError: ['“F(view_count) + Value(1)” value must be an integer.']: (poll.poll:pk=10) field_value was 'F(view_count) + Value(1)'

Здесь приведена полная трассировка стека:

Что означает эта загадочная ошибка (значение, которое я передаю [1], явно является целым числом). Как мне решить эту проблему?

попробуйте Value(F('view_count') + 1, output_field=IntegerField()). Это может сработать.

Преобразование моего комментария в ответ, чтобы добавить больше контекста.

Возможно ли, что начальное значение view_count не является целым числом? Например, None?

Кроме того, из трассировки стека я вижу, что после __update_fields выполняется больше пользовательских методов. Если там выполняется больше операций над view_count текущего экземпляра, это может быть проблематично из-за this. В принципе, значение view_count будет <CombinedExpression: F(view_count) + Value(1)>, если тот же экземпляр python будет использоваться позже.

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

Вернуться на верх