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 будет использоваться позже.
Возможно, вам потребуется обновить экземпляр из базы данных после сохранения.