Я использую базу данных Firebase Realtime с Django, используя pyrebase. Когда я делаю несколько запросов в одном представлении, получение данных занимает много времени.
Я попытался извлечь базу данных одновременно, что значительно ускоряет загрузку, но в базе данных есть дочерние «Транзакции», в которых хранятся прошлые транзакции. Таким образом, выборка всей базы данных приведет к получению данных (увеличивая сверхурочные), которые не требуются.
def post_menu(request):
vendors = database.child('Vendors').shallow().get().val()
curr_vendor_list = [i for i in vendors if database.child('Vendors').child(i).child('email').get().val() == request.user.email]
if curr_vendor_list:
curr_vendor = curr_vendor_list[0]
else:
error_msg = {'msg': "You are not a registered Vendor!"}
return render(request, 'Authentication/login.html', error_msg)
if request.method == 'POST':
category = request.POST.get('category')
if category == 'new':
category_name = request.POST.get('category_input')
elif category == 'existing':
category_name = request.POST.get('category_select')
else:
return redirect('Vendor:reviews')
item_name = request.POST.get('item')
ingredients = request.POST.get('ingredients')
mark = request.POST.get('mark')
price = request.POST.get('price')
dict_item_properties = {'ingredients': ingredients, 'mark': mark, 'price': price}
if category == 'new':
dict_item = {item_name: dict_item_properties}
database.child('Menus').child(curr_vendor).child(category_name).set(dict_item)
elif category == 'existing':
database.child('Menus').child(curr_vendor).child(category_name).child(item_name).set(dict_item_properties)
return redirect('Vendor:menu')
return redirect('Vendor:reviews')