python - Django Q过滤外键
问题描述
我正在尝试创建一个从两个字段中获取输入并使用两者进行搜索的搜索。我知道如何过滤非外键,但尝试过滤外键会出现错误“相关字段查找无效:国家/地区”
我希望作业返回过滤查询和国家/地区的结果。我怎样才能最好地做到这一点?
模型:
class Job(models.Model):
title = models.CharField(max_length=50)
...
country = models.ForeignKey(
Country,
blank=True,
null=True,
help_text="Select if you're hiring within a specific "
"country",
on_delete=models.PROTECT
)
看法:
def jobs_search(request):
form = SearchForm(request.GET)
if form.is_valid():
cd = form.cleaned_data
jobs = Job.objects.filter(site_id=get_current_site(request).id) \
.filter(paid_at__isnull=False) \
.filter(expired_at__isnull=True) \
.filter(
Q(title__icontains=cd['query'], ) |
Q(description__icontains=cd['query']) & Q(country__country__icontains=cd['country'])
) \
.order_by('-paid_at')
meta_desc = 'Search Results'
title = 'Search Results'
context = {'meta_desc': meta_desc,
'title': title,
'form': form,
'jobs': jobs}
return render(request, 'job_board/jobs_index.html', context)
解决方案
你可以试试这个
from django.db.models import Q
import operator
jobs = Job.objects.all()
query = reduce(operator.and_, [ Q(author__name__icontains=x) for x in jobs ] )
jobsfilter = jobs.filter( query )
推荐阅读
- java - Lombok 生成的构造函数不能在 SpringBootTest 中隐式自动装配
- java - MySql(休眠)查询
- mqtt - 为什么不能将主题别名存储在 MQTT v5 中的持久会话中
- shell - 获取 + if [[ -z "$CI_COMMIT_TAG" ]]; 然后 + ~ ... 使用 shell 执行程序时 Windows 10 上的错误
- reactjs - 导出具有 Material-UI 主题支持的辅助函数
- c# - 如何使用不允许设置空列表的列表属性反序列化对象的 XML?C#
- visual-studio-code - 如何在 vscode c/c++ intelisense 中禁用错误弹出消息
- tfs - 获取所有历史、变更集中文件的所有版本
- blockchain - UniswapV2Router02 合约中的“amountIn”有什么单位?
- python - 熊猫 -> 数据框 -> 排名