【问题标题】:django multiple query filter - match 1 or 2 fieldsdjango 多个查询过滤器 - 匹配 1 或 2 个字段
【发布时间】:2016-04-15 22:35:57
【问题描述】:

我有一个这样的模型:

class Result(models.Model):
    title = models.CharField(max_length=300)
    desc = models.TextField(max_length=800)
    url = models.CharField(max_length=200)
    rank = models.BigIntegerField()
    category = models.ForeignKey('Category')
    tags = TaggableManager()
    def __str__(self):
        return self.title
    class Meta:
        verbose_name_plural = "Risultati"

class Category(models.Model):
    title = models.CharField(max_length=300)
    slug = models.SlugField(null=True)
    def __str__(self):
        return self.title
    class Meta:
        verbose_name_plural = "Categorie"

和观点:

def search_form(request):
    return render(request, 'search.html')

def result(request):
    if 'q' in request.GET and request.GET['q']:
        q = request.GET['q']
        results = Result.objects.filter(tags__name__in=[q], desc__icontains=q).order_by('-rank')
        return render(request, 'results.html', {'results': results, 'query': q})
    else:
        return render(request, 'search.html', {'error': True})

def detail(request, result_id):
    try:
        result = Result.objects.get(pk=result_id)
    except Result.DoesNotExist:
        raise Http404("Nessun risultato :(")
    return render(request, 'detail.html', {'result': result})

我需要按过滤器、标签或 desc 搜索,我尝试连接 filter().filter() 但没有任何反应,错误在哪里?

【问题讨论】:

    标签: django filter field match


    【解决方案1】:

    在相同的filter() 或不同的filter() 中链接表达式执行隐式AND。如果要执行OR 或显式AND,则需要改用Q objects。

    ....filter(Q(tags__name__in=[q]) | Q(desc__icontains=q))....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-25
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-28
      相关资源
      最近更新 更多