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

API для выборки из бд по параметрам

19.08.2021, 09:29. Показов 1825. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите, пожалуйста. Есть в бд таблица с вакансиями. Нужно дописать несколько АПИ. На данный момент есть АПИ, с помощью которого можно достать из таблицы все новые вакансии. Теперь нужно написать ещё 4 АПИ:
1. доставать из БД все вакансии по id профессии (например, все вакансии с id=123),
2. доставать по location (например, показать все вакансии, где location=Moscow),
3. доставать вакансии из бд за определённый период (например, показать все добавленные в БД вакансии за последние 30 дней, за последние 7 дней),
4. доставать вакансии по уровню зарплаты (например,показать все вакансии, где salary_max=100000, показать все вакансии, где salary_min=60000).
Если 1 и 2 я примерно понимаю, как сделать, то 3 и 4 пока смутно. Прошу помощи.
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
#модель
class Vacancy(models.Model):
    id = models.IntegerField(default = 0, null=False, blank=False)
    date = models.DateTimeField(default=datetime.now, null=False, blank=False)
    text = models.TextField(null=True, blank=True)
    VAC_STATUS = [
        ('N','IS_NEW'),
        ('P','PARSED'),
    ]
    status = models.CharField(max_length=1, choices=VAC_STATUS, default='N')
    location = models.TextField(null=True, blank=True)
    salary_max = models.DecimalField(max_digits=10, decimal_places=2, null=True)
    salary_min = models.DecimalField(max_digits=10, decimal_places=2, null=True)
    profession_id = models.OneToOneField('Profession', on_delete = models.CASCADE, related_name='profession_id') # данные хранятся в другой таблице с названиями профессий
    profession_name = models.OneToOneField('Profession', on_delete = models.CASCADE, related_name='profession_name')  # данные хранятся в другой таблице с названиями профессий
 
    def __str__(self):
        return self.message
 
#сериалайзер
class NewVacancySerializer(serializers.ModelSerializer):
    class Meta:
        model = Vacancy
        fields = '__all__'
        verbose_name = 'Vacancy'
        verbose_name_plural = 'Vacancies'
 
# API для получения из базы списка только новых вакансий (со статусом 'is_new')
def new_vacancy_list(request, count_new_vac = 1):
    if request.method == 'GET':
        new_vacancies = Vacancy.objects.all().order_by('-date').filter(status = 'N').order_by('-date')[:int(count_new_vac)]
        serializer = NewVacancySerializer(new_vacancies, many=True)
        return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2021, 09:29
Ответы с готовыми решениями:

Подскажите, на чём написать простенькую программу для выборки по нескольким параметрам
Здравствуйте, господа программисты. Возникла вот такая задача. Для частных нужд (не коммерческих =)) понадобилась небольшая программка для...

Создать форму выборки данных по определенным параметрам
Не знаю как создать форму выборки данных по определенным параметрам , а не всех данные в таблице. Подскажите как с этим быть.

Прогнозирование размаха выборки по известным параметрам распределения
Здравствуйте. Вопрос к уважаемым экспертам. Как можно спрогнозировать размах выборки, зная параметры распределения и объём выборки. Я...

5
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
19.08.2021, 12:55
На вьюхе перепиши метод на на класс, унаследуйся от ListAPIView, возьми django-filter и будет тебе праздник)
0
0 / 0 / 0
Регистрация: 04.09.2020
Сообщений: 31
26.08.2021, 11:36  [ТС]
Onet1me, добрый день!
Как добавить в этот код проверку на ошибки? Здесь я получаю список всех вакансий со статусом New. Мне нужно, чтобы в случае возникновения HTTP статуса с какой-либо ошибкой, информация с текстом об этом выводилась на экран. Что-то типа if status_code != 200: и т.д. Не знаю, как верно записать. Спасибо.

Python
1
2
3
4
5
def new_vacancy_list(request, count_new_vac = 1):
    if request.method == 'GET':
        new_vacancies = Vacancy.objects.all().order_by('-date').filter(status = 'N').order_by('-date')[:int(count_new_vac)]
        serializer = NewVacancySerializer(new_vacancies, many=True)
        return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
09.09.2021, 11:32
Цитата Сообщение от IrinaE Посмотреть сообщение
def new_vacancy_list(request, count_new_vac = 1):
    if request.method == 'GET':
        new_vacancies = Vacancy.objects.filter(status = 'N').order_by('-date')[:int(count_new_vac)]
        serializer = NewVacancySerializer(new_vacancies, many=True)
        return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})
Попробуй так:
Python
1
2
3
4
5
6
7
 if request.method == 'GET':
    try:
        new_vacancies = Vacancy.objects.filter(status = 'N').order_by('-date')[:int(count_new_vac)]
        serializer = NewVacancySerializer(new_vacancies, many=True)
        return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})
    except Exception as e:
        return JsonResponse({"error": e})
Обратите внимание как я изменил new_vacancies. Метод filter оналогичен методу all. просто он может принимать параметры для фильтрации. Вам стоит на ряду с джангой попробовать посмотреть sql запросы, и посмотреть как джанго ORM формирует запрос из вашего кода))
0
0 / 0 / 0
Регистрация: 04.09.2020
Сообщений: 31
09.09.2021, 12:33  [ТС]
Onet1me, спасибо за помощь. Задачу решила с помощью SQL запросов и Q. А обработку ошибок с помощью Swagger. Кстати, Вы знакомы со сваггером? Могли бы подсказать по подключению его в проект?
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
09.09.2021, 13:21
Если вы решили задачу через sql запрос в джанге, это плохо. Так конечно можно делать иногда даже необходимо, но только в тонких моментах. Т.к. если у вас что то измениться в моделе например, но ваш кусок кода перестает работать(
По поводу swagger, конечно его используют очень широко, есть модуль drf-yasg очень легко устанавливается и довольно удобный
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2021, 13:21
Помогаю со студенческими работами здесь

Результат выборки передать GET запросом для изменения условий другой выборки
Есть такая таблица menu: Таким запросом вывожу на страницу: <?php include ("bd.php"); function display_menus($parent = 0) ...

Как проверить две выборки по критерию хи квадрат (есть функция chi2gof но она для одной выборки)
как проверить две выборки по критерию хи квадрат (есть функция chi2gof но она для одной выборки)

Необходимо осуществить поиск по параметрам и вывести в таблицу StringGrid список людей по этим параметрам
procedure TForm1.Button1Click(Sender: TObject); // Поиск по параметрам var i: integer; x, y: string; z: tpats; flag:...

SQL запрос подсчёта СКО выборки с выводом в конце выборки
Приветствую. Есть таблица данных вида: ID|Val 1|x1 2|x2 ...|... n|xn Расчёт среднего значения с выводом вместе с...

Можно ли исключить из выборки результаты предыдущей выборки?
Не могу придумать как лучше решить следующую задачу: Есть таблица с неким числовым полем, в котором хранятся семизначные номера....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru