【问题标题】:use search field in Django [duplicate]在 Django 中使用搜索字段 [重复]
【发布时间】:2013-06-13 11:36:15
【问题描述】:

我有一个这样的模型:

class Job(models.Model):
   title=models.CharField(max_length=40)
   genre=models.ManyToManyField(JobGenre, through='GenreToJob')   
   creator=models.ForeignKey(Customer)
   location=models.TextField()
   start_time=models.DateTimeField()             
   end_time=models.DateTimeField()
   description=models.TextField()
   reward=models.CharField(max_length=100, null=True)
   isActive=models.BooleanField(default=True)
   picture=models.ImageField(upload_to='media/job', null=True)     
   questions=models.ForeignKey(Question,null=True )

并且我想创建一个搜索字段来搜索具有特定字段关键字的工作,它能够在多个列中进行搜索,例如:'title'、'genre'、'description' 等。 Job.objects.filter() 只能在一列中搜索。

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以这样使用,

    Job.objects.filter(column1=..).filter(column2=..).filter(column3=..)
    

    【讨论】:

    • 更好的是,对于每一列,使用<column_name>__search=<search_term> 这样他就可以执行全文搜索。但我不确定这是 OP 想要的(我想他自己想出了他可以链接过滤器)
    • 谢谢亚当。当你链接过滤器时,它就像一个“and”语句(该关键字必须在所有选定的列中),或者像一个“or”语句(关键字必须至少在一个选定的列中)?
    • 它在模仿“和”,因为第二个过滤器在第一个过滤器的过滤结果上运行。
    • 谢谢,是否可以不使用全文搜索做“或”?(尚未创建全文字段)
    【解决方案2】:

    据我所知,您的语句“Job.objects.filter() 只能在一列中搜索”甚至没有通过笑声测试。请阅读https://docs.djangoproject.com/en/dev/topics/db/queries/ 的详细文档,特别是在其中提到了连接过滤器的地方。更复杂的查询可以通过“Q”对象处理。 “Like”查询更复杂(但您仍然可以相当轻松地进行 endwith 或 startswith 类型查询)。

    干杯 阿尔夫

    【讨论】:

      猜你喜欢
      • 2020-10-11
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多