class Parent(models.Model):
name = models.CharField(max_length=255, blank=False)
class Child(models.Model):
parent = models.ForeignKey(Warehouse, related_name="children")
name = models.CharField(max_length=255, blank=True)
需要通过某些术语从儿童应用搜索:
如果儿童 名称不为空或不为空,则我们将 term 与 Child &#39> name else - 将 term 与 Parent name 进行比较。
类似的东西:
search_result = Child.objects.filter(
if
Q(name__isnull=True) | Q(name='')
then
parent__name__icontains=term
else
name__icontains=term
)
以便:
parent = Parent(name="Smith").save()
ch1 = Child(parent=parent, name="Smithson").save()
ch2 = Child(parent=parent, name="Watson").save()
ch3 = Child(parent=parent).save()
按术语搜索"史密斯"会导致:
[ch1, ch3]
答案 0 :(得分:1)
您可以使用多个带有()
符号的Q对象。
from django.db.models import Q
search_result = Child.objects.filter(
((Q(name__isnull=True) | Q(name='')) & Q(parent__name__icontains=term)) |
(Q(name__isnull=False) & Q(name__icontains=term))
)
这意味着匹配((Q(name__isnull=True) | Q(name='')) & Q(parent__name__icontains=term))
这个条件或匹配(Q(name__isnull=False) & Q(name__icontains=term))
答案 1 :(得分:0)
没有经过测试但是这样的事情:
{{1}}