如何使用具有外键的模型进行Q查询?

时间:2013-10-03 17:27:17

标签: django django-models django-q

我的模型定义如下:

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 个答案:

答案 0 :(得分:0)

这应该有效:

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)