如何过滤ForeignKey设置图标集?

时间:2019-01-28 15:21:04

标签: django

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

2 个答案:

答案 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)

您可以在official documentation

中找到更多信息。