models.py
class AModel(models.Model):
content = models.TextField(max_length=20)
class BModel(models.Model):
a_model = models.ForeignKey(AModel, on_delete=models.CASCADE, null=True, blank=True)
text = models.TextField(max_length=20)
假设我有一个AModel对象:a_object
我也有BModel对象:
{'a_model': a_object, 'text': '111'},
{'a_model': a_object, 'text': '222'},
{'a_model': a_object, 'text': '333'}
views.py
a_models = AModel.objects.filter(Q(bmodel__text__icontains=search_word))[:10]
问题在于,如果search_word
是'111'
,似乎运行良好,但是search_word
是'222'
或'333'
,则找不到{ {1}}。
我认为a_object
的意思是bmodel__text__icontains=search_word
,
不是'only one' bmodel__text__icontains=search_word
。
我该如何'all' bmodel__text__icontains=search_word
?
答案 0 :(得分:2)
我使用与您完全相同的模型和数据。
>>> a_models = AModel.objects.filter(Q(bmodel__text__icontains='222')).values('content')
>>> a_models
<QuerySet [{'content': 'a_object'}]>
>>> a_models = AModel.objects.filter(Q(bmodel__text__icontains='333')).values('content')
>>> a_models
<QuerySet [{'content': 'a_object'}]>
它返回预期结果。
我认为您可能会弄乱某些东西。 再次检查!
答案 1 :(得分:1)
您可以使用Q
链接查询。例如,您可以执行以下操作:
$> complex_query = Q(bmodel__text__icontains='222') | Q(bmodel__text__icontains='333')
$> AModel.objects.filter(complex_query)
或更佳:
$> elms = ["222", "333"]
$> complex_query = Q()
$> for elm in elms:
complex_query |= Q(bmodel__text__icontains=elm)
$> AModel.objects.filter(complex_query)
中找到更多信息。