Метод firebase get, возвращающий список для одного объекта объектов и дикту для другого
Я использую django с firebase и имею 2 объекта в базе данных, все о них одинаково, способ хранения в базе данных, способ доступа к ним. Когда я использую метод get
телефоны = ref.child('Data').child('users').child(uid).child('phones').get()
компьютеры = ref.child('Data').child('users').child(uid).child('computers').get()
(абсолютно тот же способ)
для первого я получаю список dict, выглядящий так [{'OS': 'Windows',
'батарея': 2000.0,
'память': 16.0,
'популярность': 200.0,
'цена': 2429.73,
'экран': 6.0},
{'OS': 'Windows',
'батарея': 1600.0,
'память': 32.0,
'популярность': 200.0,
'цена': 1907.28,
'экран': 6.0}]]
и для второго я получаю дикту из дикты как эта
{'12': {'cd': 'no',
'hd': 5.0,
'multi': 'нет',
'premium': 'yes',
'цена': 1397.0,
'ram': 5.0,
'экран': 2.0,
'скорость': 5.0},
'13': {'cd': 'yes',
'hd': 45.0,
'multi': 'нет',
'premium': 'нет',
'цена': 1999.0,
'ram': 8.0,
'экран': 14.0,
'speed': 120.0}}
у второго также есть их id, ниже которого они хранятся (я храню их так ref = db.reference("Data/users/"+str(request.session['user_id'])+'/phones/'+str(phone.id)))
телефон = phone.save_to_firebase()
ref.set(phone), ref = db.reference("Data/users/"+str(request.session['user_id'])+'/computers/'+str(comp.id))
компьютер = comp.save_to_firebase()
ref.set(computer))
Я хочу, чтобы оба варианта выглядели как второй и понятия не имею, почему они отличаются
Я проверил все, но нет ни единой разницы в том, как обрабатываются объекты
Похоже, что вы храните узлы в Firebase Realtime Database с короткими числовыми значениями для их ключей. Это заставляет Firebase SDK пытаться интерпретировать их как массивы, что, похоже, работает в одних случаях и не работает в других.
Нет никакого способа контролировать такое поведение SDKs/APIs, поэтому лучший способ справиться с этим - не использовать цифровые клавиши, и, например, префикс для них бу короткое строковое значение, т.е. key_12
.
Подробнее о том, как Firebase работает с массивами/массивоподобными структурами, смотрите Best Practices: Массивы в Firebase.