Обновление поля JSON для каждого пользователя с использованием сигналов - PullRequest
0 голосов
/ 27 февраля 2019

У меня в настоящее время есть 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, а затем повторного запроса отдельных пользователей для обновления поля

...