如何使用具有外键的模型进行 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,那么它会查找 111121166...,(其中包含 1 的任何 id)这可能不是您想要的。

要特别指出你的错误,

Q(model2.id__icontains=search)

应该是

Q(model2__id__icontains=search)

【讨论】:

以上是关于如何使用具有外键的模型进行 Q 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Flask-SQLAlchemy 使用 csv 填充具有外键的模型?

django 查询具有外键的模型,检查该外键的属性

返回具有所有外键的行

django:如何从包含外键的多个模型中制作一个表单

使用表单与包含外键的模型进行交互

Django 和具有多个外键的模型