Поиск в таблицах нескольких моделей в Django Rest Framework

У меня есть 3 стола

  • PC(ID, PcNAME, Brand)
  • CellPhoness(ID, CellPhoneName, Brand)
  • Printers(ID, PrinterName, Brand).

Между тремя таблицами нет никакой связи. Я хотел бы запустить запрос, в котором пользователь может ввести строку поиска, и программа будет искать 3 модели, в которых существуют данные, и возвращать то же самое с идентификатором, именем и брендом в форме ответа JSON.

Что вы пробовали до сих пор? Вы где-то застряли?

Umair Mohammad 17.12.2018 09:25

@MohammadUmair Я пробовал этот def searchquery(self,data): pc = PC.objects.filter('PcName'=data).values('ID', 'PcName', Brand) cellphone = CellPhone.objects.filter('CellPhoneName'=data).values('ID', 'CellPhoneName', Brand) printer = Printer.objects.filter('PrinterName'=data).values('ID', 'PrinterName', Brand) if pc: return pc if cellphone: return cellphone if printer: return printer else: return Respone ("error no data found"), но, похоже, я не получаю данных, найденных ни для одного введенного элемента, я думаю, что я застрял в синтаксисе больше, чем в логике. Я новичок в этом.

DjangoNoob 17.12.2018 11:03

@Edgar, спасибо за редактирование.

DjangoNoob 17.12.2018 11:06
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
3
1 869
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сделать что-то вроде этого:

  1. Получить текст запроса из параметров запроса

  2. Фильтр на его основе

  3. Вернуть данные сериализатора

     def view(request):
         query = request.GET.get("query", None)
         pcs = PC.objects.all()
         cell_phones = CellPhone.objects.all()
         printers = Printer.objects.all()
    
         if query:
             pcs = pcs.filter(name__icontains=query)
             cell_phones = cell_phones.filter(name__icontains=query)
             printers = printers.filter(name__icontains=query)
    
         return JsonResponse({"pcs": PCSerializer(instances=pcs, many=True).data,
                             "cell_phones": CellPhoneSerializer(instances=cell_phones, many=True).data,
                             "printers": PrinterSerializer(instances=printers, many=True).data})
    

Вам нужно будет создать сериализаторы для каждого объекта, пожалуйста, посмотрите эта документация.

Спасибо за быстрый ответ и ресурс, мы его протестируем и скоро свяжемся с вами! :)

DjangoNoob 17.12.2018 11:14

Другие вопросы по теме