0 / 0 / 0
Регистрация: 04.08.2022
Сообщений: 47

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

08.10.2022, 16:06. Показов 1629. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru