【问题标题】:Searching in multiple models' tables in Django Rest Framework在 Django Rest Framework 中搜索多个模型的表
【发布时间】:2021-08-19 13:38:41
【问题描述】:

我有 3 张桌子

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

这三个表之间没有关系。我想运行一个查询,用户可以输入搜索字符串,程序将在 3 个模型中搜索数据存在的位置,并以 JSON 响应的形式返回 ID、名称和品牌。

【问题讨论】:

  • 到目前为止您尝试过什么?你被困在某个地方了吗?
  • @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"),但我似乎最终没有为输入的任何项目找到任何数据,我认为语法比逻辑更多。我是这方面的初学者。
  • @Edgar 感谢您的编辑。

标签: python django django-models django-rest-framework


【解决方案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})
    

您需要为每个对象创建序列化程序,请查看this documentation

【讨论】:

  • 感谢您的快速回复和资源,将对其进行测试并尽快回复您! :)
猜你喜欢
  • 1970-01-01
  • 2013-11-11
  • 2014-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
相关资源
最近更新 更多