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

Фильтрация Many-to-Many

08.10.2022, 16:06. Показов 1616. Ответов 7

Студворк — интернет-сервис помощи студентам
У меня есть модели. Мне надо сделать выбрать определённое предприятие из модели Enterprise, и отфильтровать поле product, оставить те продукты категория которых подходит или цена соответствует, такой запрос:
Python
1
queryset = Enterprise.objects.filter(city_area=district_id, product__category=1).distinct()
, выбирает только предприятия у которых есть товар определённой категории, а как отсортировать внутри предприятия поле product (пример json привёл) не ясно. вот ТЗ кусок:

Требуются следующие ресурсы API:
1) Список заведений - с условием заранее выбранного района:
• url: /organizations/<district_id>/
• фильтры: по цене (максимальная\минимальная), по категории товаров\услуг в этом
заведении
• поиск по названию товара\услуги (реализация неточного поиска будет плюсом)


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class CityArea(models.Model):
    area = models.CharField(max_length=255, verbose_name='Название района', unique=True)
 
    class Meta:
        verbose_name = 'Городской район'
        verbose_name_plural = 'Городские районы'
 
    def __str__(self):
        return self.area
 
 
class EnterpriseNetwork(models.Model):
    network = models.CharField(max_length=255, verbose_name='Название сети', unique=True)
 
    class Meta:
        verbose_name = 'Сеть предприятий'
        verbose_name_plural = 'Сети предприятий'
 
    def __str__(self):
        return self.network
 
class Category(models.Model):
    category = models.CharField(max_length=255, verbose_name='Категория товара/услуги')
 
    class Meta:
        verbose_name = 'Категория товара/услуги'
        verbose_name_plural = 'Категории товаров/услуг'
 
    def __str__(self):
        return self.category
 
 
class Product(models.Model):
    product = models.CharField(max_length=255, verbose_name='Название продукта/услуги')
    category = models.ForeignKey(Category, verbose_name='Категория товара/услуги', on_delete=models.CASCADE)
    price = models.FloatField(validators=[MinValueValidator(0.1)], verbose_name='Цена')
 
 
    class Meta:
        verbose_name = 'Название продукта/услуги'
        verbose_name_plural = 'Названия продуктов/услуг'
 
    def __str__(self):
        return str(self.product)
 
 
class Enterprise(models.Model):
    enterprise = models.CharField(max_length=255, verbose_name='Название сети', unique=True)
    enterprise_network = models.ForeignKey(EnterpriseNetwork, verbose_name='Название сети', on_delete=models.CASCADE)
    product = models.ManyToManyField(Product, verbose_name='Название продукта/услуги', related_name='product_name')
    description = models.TextField(verbose_name='Описание предприятия')
    margin_ratio = models.FloatField(validators=[MinValueValidator(0.1),], default=1)
    city_area = models.ManyToManyField(CityArea, verbose_name='Городской район')
 
 
    class Meta:
        verbose_name = 'Предприятие'
        verbose_name_plural = 'Предприятия'
 
    def __str__(self):
        return self.enterprise
 
    def add_product(self, product: object) -> object:
        """Добовляет продукт к предприятию"""
        self.product.add(product)
        self.save()
        return self
ответ который я получаю:
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[
    {
        "id": 3,
        "enterprise": "Магнит 2",
        "enterprise_network": {
            "id": 1,
            "network": "Магнит"
        },
        "product": [
            {
                "id": 7,
                "product": "Хлеб",
                "price": 12.0,
                "category": {
                    "id": 1,
                    "category": "Еда"
                }
            },
            {
                "id": 10,
                "product": "Вода",
                "price": 12.0,
                "category": {
                    "id": 2,
                    "category": "Жидкости"
                }
            },
            {
                "id": 13,
                "product": "сок",
                "price": 6.0,
                "category": {
                    "id": 2,
                    "category": "Жидкости"
                }
            }
        ],
        "city_area": [
            {
                "id": 2,
                "area": "район2"
            }
        ],
        "description": "а",
        "margin_ratio": 1.0
    }
]
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.10.2022, 16:06
Ответы с готовыми решениями:

Фильтрация
Добрый вечер!!! Помогите пожалуйста ...делаю фильтр для инвентаризационного номера ...Пишу следующий код procedure...

фильтрация
Добрый день. Подскажите мне, пожалуйста, несколько вопросов по фильтрации. База данных выполнена в Access. Для вывода данных использую...

фильтрация
Какие поля должны быть в источнике строк фильтра &quot;выбор сотрудника&quot;?

7
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
08.10.2022, 21:20
Батарейками можно пользоваться?
0
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 47
08.10.2022, 21:32  [ТС]
Цитата Сообщение от Onet1me Посмотреть сообщение
Батарейками можно пользоваться?
Можно пользоваться чем угодно. Главное результат. Что за батарейки?
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
08.10.2022, 21:34
подключи тогда django-filter и не мучайся

Добавлено через 1 минуту
Python
1
2
3
4
5
    def add_product(self, product: object) -> object:
        """Добовляет продукт к предприятию"""
        self.product.add(product)
        self.save()
        return self
Нет смысла в это методе, можешь его удалить
0
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 47
08.10.2022, 21:40  [ТС]
Цитата Сообщение от Onet1me Посмотреть сообщение
подключи тогда django-filter и не мучайся
как подключить что бы он искал в поле m2m? Я смотрел в их строну, но так и не понял как мне приминить.
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
08.10.2022, 21:48
Залей код на гит и дай ссылку
0
0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 47
08.10.2022, 22:04  [ТС]
Цитата Сообщение от Onet1me Посмотреть сообщение
Залей код на гит и дай ссылку
вот ссылка https://github.com/AbramtsevFV... ider_group . За ранее благодарен
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
08.10.2022, 22:22
Я тебе в личку написал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.10.2022, 22:22
Помогаю со студенческими работами здесь

Фильтрация
подскажите как сделать чтоб цифры тоже фильтровались procedure TForm2.Edit1Change(Sender: TObject); begin if Length(Edit1.Text) &gt;...

Фильтрация
Добрый день! Такой вопрос был. Как реализовать, при выборе в combobox свое отделение, в datagridView показывать только те записи...

Фильтрация бд
работаю с бд accdb методом как в faq в бд есть таблица с списком Ф И О людей Подскажите как сделать при вводе в textbox букв например...

Фильтрация в БД (С++)
Доброго времени суток всем! Прошу помощи...ибо я нуль полный в программировании...но что-то слепить сумел... Задача моя заключается...

фильтрация С++
void __fastcall TForm2::BitBtn1Click(TObject *Sender) { //TLocateOptions *LocOpt; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru