django 多查询过滤器 - 匹配 1 或 2 个字段
django multiple query filter - match 1 or 2 fields
我有这样一个模型:
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})
我需要通过过滤器、标签或描述符进行搜索,我尝试连接 filter().filter() 但没有任何反应,错误在哪里?
在相同 filter()
或不同的表达式中链接表达式执行隐式 AND
。如果要执行 OR
或显式 AND
,则需要使用 Q
objects。
....filter(Q(tags__name__in=[q]) | Q(desc__icontains=q))....
我有这样一个模型:
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})
我需要通过过滤器、标签或描述符进行搜索,我尝试连接 filter().filter() 但没有任何反应,错误在哪里?
在相同 filter()
或不同的表达式中链接表达式执行隐式 AND
。如果要执行 OR
或显式 AND
,则需要使用 Q
objects。
....filter(Q(tags__name__in=[q]) | Q(desc__icontains=q))....