0

我的模型是这样定义的:

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')

问题是我不知道如何使用查询集进行 OR 查询。

qs = Model1.objects.filter(Q(model2.id__icontains=search) | Q(id__icontains=search))

我明白了

关键字不能是表达式

那么问题是如何在 Q 查询中引用相关模型的字段?谢谢

4

1 回答 1

0

这应该有效:

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)
于 2013-10-03T17:44:28.877 回答