我的模型定义如下:
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查询中引用相关模型的字段?感谢
答案 0 :(得分: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)