У меня в настоящее время есть JSONfield на моей модели User, который иногда необходимо обновить, я устанавливаю сигнал, в котором я запрашиваю всех пользователей, а затем пытаюсь выполнить обновление:
all_users = User.objects.all()
Первоначально яЯ подумал, что могу обновить значение поля, добавив новый ключ / значение в поле JSON, однако это не представляется возможным:
value_updates = all_users.values("json_data").update(json_data.myDictionary[key]= False)
, поэтому я перебираю все возвращаемые значения и делаю это 1на 1: и повторно запрашивать у пользователя первичный ключ и обновлять его независимо следующим образом:
for item in values_updates:
try:
usrData = item['json_data']
usrData['key'][instance.title]=False
User.objects.filter(pk=item['pk']).update(json_data=usrData)
except KeyError as err:
print(err)
Я очень сомневаюсь, что мой подход является оптимальным (и определенно не масштабируемым), однако я не понялкаким-то другим способом сделать это.
Каков наилучший подход в достижении этого без итерации по всем моим пользователям в querySet, извлечения и обновления JSONfield, а затем повторного запроса отдельных пользователей для обновления поля