Для ForeignKeys я могу сделать select_related(), но есть ли способ сделать что-то похожее на BooleanFields? Мое приложение в настоящее время проверяет более 600 раз, если у объекта есть is_app_category, установленного в True, что является излишним и занимает 10 секунд, чтобы загрузить страницу (все еще небольшое число, так как конечный продукт будет иметь тысячи записей).django - получить все объекты с истинным значением в одном запросе
просмотров .py:
def assign_app_categories(request):
user = request.user
if user.is_admin:
category_list = Categories.objects.select_related('company').filter(show_in_menu = True, is_app_category = False)
else:
category_list = Categories.objects.filter(company = user.company, show_in_menu = True)
number_of_categories = len(category_list)
zipped_data = {}
CategoriesFormSet = formset_factory(CategoriesAssignForm, extra = number_of_categories)
if request.method == "POST":
categoriesFormSet = CategoriesFormSet(request.POST)
if categoriesFormSet.is_valid():
for (name, cleaned_form) in zip(category_list, categoriesFormSet.cleaned_data):
if cleaned_form.get('parent') != None:
if user.is_admin:
category_item = Categories.objects.filter(name = name).filter(show_in_menu = True)[0]
else:
category_item = Categories.objects.get(company = user.company, name = name)
category_item.parent = cleaned_form.get('parent')
category_item.show_in_menu = False
category_item.save()
messages.success(request, _('Categories are assigned to App categories!'))
history = HistoryLog(user = request.user, function = 'categories.assign_app_categories', kind = 404).save()
return HttpResponseRedirect('/categories/')
else:
categoriesFormSet = CategoriesFormSet()
zipped_data = zip(category_list, categoriesFormSet)
return render(request, 'categories/assign.html', {'zipped_data': zipped_data, 'category_list': category_list, 'categoriesFormSet': categoriesFormSet, 'menu':'categories'})
Джанго-отладки инструментов:
SELECT "categories_categories"."id",
"categories_categories"."is_app_category",
"categories_categories"."brand_id",
"categories_categories"."company_id",
"categories_categories"."name",
"categories_categories"."slug",
"categories_categories"."description",
"categories_categories"."show_in_menu",
"categories_categories"."gender",
"categories_categories"."parent_id",
"categories_categories"."products_count",
"categories_categories"."date_create",
"categories_categories"."date_modified"
FROM "categories_categories" WHERE "categories_categories"."is_app_category" = 'True'
Duplicated 633 times.
Вам действительно нужны запросы 'Q'? не будет 'filter (show_in_menu = True, is_app_category = False)' делать то же самое? – Sayse
Да, так оно и есть. Этот проект был передан мне от человека, который больше не работает здесь, и моя задача - исправить ситуацию и сделать ее гладкой. Сложнее всего делать, поскольку большинство вещей не работают, как они должны. – jarkow
Может ли мое предложение решить проблему? Это может сделать запрос немного быстрее, но для любых улучшений производительности ... какие значения вам действительно нужны из категории? как он используется? – Sayse