如何使用具有外键的模型进行 Q 查询?
Posted
技术标签:
【中文标题】如何使用具有外键的模型进行 Q 查询?【英文标题】:How to make Q queries with models with foreign keys? 【发布时间】:2013-10-10 12:28:46 【问题描述】:我的模型是这样定义的:
class Model2(models.Model):
id = models.IntegerField(primary_key=True)
name = ...
class Model1(models.Model):
id = models.IntegerField(primary_key=True)
model2 = models.ForeignKey(Model2, to_field='id', db_column='model2')
问题是我不知道如何使用 queryset 进行 OR 查询。
qs = Model1.objects.filter(Q(model2.id__icontains=search) | Q(id__icontains=search))
我明白了
关键字不能是表达式
所以问题是如何在 Q 查询中引用相关模型的字段?谢谢
【问题讨论】:
【参考方案1】:这应该可行:
qs = Model1.objects.filter(Q(model2__id=search) | Q(id=search))
如果你正在寻找id__icontains
,我会重新审视实现
如果您搜索 1,那么它会查找 1
、11
、121
、166
...,(其中包含 1 的任何 id)这可能不是您想要的。
要特别指出你的错误,
Q(model2.id__icontains=search)
应该是
Q(model2__id__icontains=search)
【讨论】:
以上是关于如何使用具有外键的模型进行 Q 查询?的主要内容,如果未能解决你的问题,请参考以下文章