Форум программистов, компьютерный форум, киберфорум
Python: Django
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218

Невероятно сложные запросы

28.06.2020, 11:21. Показов 894. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, начинающий. Накуралесил так, что запутался. Есть 3 модели. Категории, подкатегории, и сами блюда. каждая из таблиц, связана со следующей m2m. В данном сайдбаре, я вывожу весь список меню со связными категориями. и все работает так как нужно, полный список. Теперь. по клике на какой-либо пункт, меня должно перенаправлять на страницу с этим меню, и там уже должен выводиться список тех подкатегорий или блюд которые входят в родителя. И логично предположить, что тут просто нужен filter, но ума не приложу, как фильтровать их связь. Либо я плохо понимаю, как работает джанго, но она постоянно держит в "голове" последний кварисет, который ушел в мое представление, и это меня смущает непониманием происходящего.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="sidebar">
    <h2>Каталог меню</h2>
   {% for obj in categorydishes_list %}
    <ul>
        <li><a href="{% url 'dishes:categorydishes' obj.slug %}">{{ obj.name }}</a></li>
        {%for sub in obj.subdishes.all %}
        <ul>
           <li> <a href="#">{{ sub.name }}</a></li>
        </ul>
        {% endfor %}
    </ul>
    {% endfor %}
</div>
Модели
Python
1
2
3
4
class CategoryDishes(models.Model):
    name = models.CharField(max_length=150)
    slug = models.SlugField(max_length=150, unique=True)
    subdishes = models.ManyToManyField(SubDishes, verbose_name='Подкатегория', related_name='subdishes')
Python
1
2
3
4
class SubDishes(models.Model):
    name = models.CharField(max_length=150)
    slug = models.SlugField(max_length=150, unique=True)
    dishes = models.ManyToManyField(Dishes, verbose_name='блюдо', related_name='dishes')
Python
1
2
3
4
5
6
7
8
9
10
class Dishes(models.Model):
    name = models.CharField(max_length=300)
    description = models.TextField(max_length=600)
    image = models.ImageField('Image', null=True, blank=True)
    ccal = models.PositiveIntegerField('Калорийность', default=0)
    """текстовое поле белков углеводов и жиров, руками пусть вводят нефиг калькуляторы """
    pfc = models.CharField(max_length=100)
    weight = models.PositiveIntegerField('Вес в граммах', default=0)
    price = models.PositiveIntegerField('Цена', default=0)
    slug = models.SlugField(max_length=150)
urls
Python
1
2
3
4
5
6
7
app_name = 'dishes'
 
urlpatterns = [
path('', views.MainListView.as_view(), name='index'),
path('<int:pk>/', views.MainDetailView.as_view(), name='detail'),
path('<slug:slug>/', views.MainCategoryDishes.as_view(), name='categorydishes'),
]
а сами views вот

Python
1
2
3
4
5
6
7
8
9
10
11
class MainListView(ListView):
    template_name = 'dishes/dishes_list.html'
    queryset = Dishes.objects.all()
 
class MainDetailView(DetailView):
    model = Dishes
    template_name = 'dishes/detail.html'
 
class MainCategoryDishes(ListView):
    model = CategoryDishes
    template_name = 'dishes/categorydishes.html'
Сам словарь передаю
Python
1
2
def category_dishes_list(request):
    return {'categorydishes_list': CategoryDishes.objects.all()}
настроив перед этим проект и добавив в темплатес файлик contexts.
и все бы хорошо, но если я в нем, добавляю нужный мне фильтр, он перезаписывай старый о_О(простите но я ток начал) если покажется, что я сделал все тупо

Добавлено через 18 минут
не могу отредачить
Python
1
2
def category_dishes_list(request):
    return {'categorydishes_list': CategoryDishes.objects.all(), 'categorydishes_filter_list': CategoryDishes.objects.filter(???}
вопрос то я не задал, как отфильтровать так, чтобы выводить зависимые связи?

Добавлено через 7 минут
Я смотрел документацию джанго, и не нашел ничего, чтобы мне помогло, точнее, что-то бы да помогло, просто я видимо не совсем понимаю.
Есть ли способ вывести зависимости родителя?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2020, 11:21
Ответы с готовыми решениями:

Сложные запросы
Приветик))) Народ, мне тут в курсаче надо сделать сложные запросы, а я понятия не имею что это такое и как они выглядят... Там чёт написано...

Сложные запросы
Здравствуйте, помогите пожалуйста с запросами к базе данных! Есть база данных тема &quot;Автоматизация учета на производстве АГЗС...

сложные запросы
в целях самообразования нужен задачник (или что-то подобное) с множеством сложных запросов. помогите кто чем может )

4
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
29.06.2020, 10:07
А что мешало сделать так?

Python
1
2
3
4
class Dishes(models.Model):
    """Блюдо"""
    subcategory = models.ForeignKey(SubCategory)
    name = models.CharField(max_length=300)
Или одно блюдо может быть в нескольких подкатегориях?

Давай ещё раз: ты выбрал категорию и хочешь вывести все подкатегории? Так?
Python
1
lll = CategoryDishes.objects.get(pk=1).subdishes_set.all()
https://docs.djangoproject.com... y_to_many/
1
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218
29.06.2020, 12:48  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение

Или одно блюдо может быть в нескольких подкатегориях?
Горячее питание(категория) содержит подкатегори, горячие обеды, выпечка. там завтраки, и к примеру там суп. он будет как и в горячих обедах, т.е в горячем питании тоже, и в тоже время, в банкетном меню(тоже категория) другими словами. каждое блюдо и подкатегория может быть в любой категории. я раньше с базами не работал, скорее всего все сделал "неправильно"
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Давай ещё раз: ты выбрал категорию и хочешь вывести все подкатегории? Так?
Python
1
lll = CategoryDishes.objects.get(pk=1).subdishes_set.all()
]
у меня сейчас работает вот так.
Python
1
2
def category_dishes_list(request):
    return {'categorydishes_list': CategoryDishes.objects.all(), 'categorydishes_filter_1_list': CategoryDishes.objects.filter(id='5')}
где ID если меняю с 1 по 5, то вывожу четко как надо, только не пойму как это автоматизировать

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<div class="row">
        {% for category in categorydishes_filter_1_list %}
        <div class="box">
            <span class="editContent">{{category.name}}</span>
            <div class="image-box ">
                <img src="#" class="img-fluid" alt="" width="100px" height="100px">
            </div>
            {% for subcat in category.subdishes.all %}
            <div class="item-info-product">
                <h4>
                    <a href="#" class="editContent"> {{ subcat.name }} </a>
                </h4>
                <span></span>
            </div>
            {% endfor %}
        </div>
        {% endfor %}
но это в файле контекст, который я прописывал в настройки.
Возмоно как-от можно сделать автоматически, через views.
но, у меня стало не получатся, я запутался в край, и вообще ничего не понимаю Т_Т
когда плохо понимаешь, начинаешь читать, пытаешься делать, опять не получается. видать со временем только освоюсь, потому подскажите если сможете, как лучше организовать через вью?

Добавлено через 1 час 0 минут
все, я справился.
Сделал вот таким образом, если кому будет нужно интересно
urls
Python
1
path('<slug:slug>/', views.MainCategoryDishes.as_view(), name='categorydishes'),
views
Python
1
2
3
4
5
class MainCategoryDishes(View):
    def get(self, request, slug):
        if slug:
            menu_list = CategoryDishes.objects.filter(slug=slug)
            return render(request, 'dishes/categorydishes.html', {'menu_list': menu_list})
templates/
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{% for obj in menu_list %}
<div class="col-md-3 product-men">
    <div class="row">
        <div class="box">
            <span class="editContent">{{obj.name}}</span>
            <div class="image-box ">
                <img src="#" class="img-fluid" alt="" width="100px" height="100px">
            </div>
            {% for subcat in obj.subdishes.all %}
            <div class="item-info-product">
                <h4>
                    <a href="#" class="editContent"> {{ subcat.name }} </a>
                </h4>
                <span></span>
            </div>
            {% endfor %}
        </div>
    </div>
</div>
{% endfor %}
Спасибо всем кто пытался помочь
0
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
03.07.2020, 01:07
Александер2000, думаю, тут select_related не помешал бы
0
 Аватар для Александер2000
7 / 7 / 0
Регистрация: 29.06.2013
Сообщений: 218
05.07.2020, 01:08  [ТС]
Я сделал через шаблон, получается {% if нужный мне лист %} {% elif другой нужный мне лист %} простое и эффективное решение на мой взгляд!) и получается, одной вьюхой вывел все здесь, а про ваш совет, я почитаю, возьму на вооружение, спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2020, 01:08
Помогаю со студенческими работами здесь

Сложные запросы
Есть 4 таблицы: блюдо (код блюда, название блюда) продукты (код продукта, название продукта, производитель продукта) содержание...

сложные запросы к бд
Пытаюсь сделать удаление нескольких щаписей из бд, с помощью doctrine 2 нашла что есть функция whereIn('id', array) $em =...

Сложные запросы
Есть несколько таблиц, которые хранят данные. тЗаказы (Код_Заказа, Код_Сотрудника, Дата_Размещения, Дата_Выполнения, БезНал(Да\Нет),...

Сложные запросы
Добрый день. Есть некая таблица, выглядит так : id parent_id name act 3 0 Issue 0 1 4 3 Subissue 0 for Issue 0 1 5 3 ...

Сложные запросы
Здравствуйте =) Столкнулся с такой проблемой. Даны несколько таблиц. 1 содержит информацию о водителях, 2 о маршрутах, а 3 содержит в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru