Django查询条件字段选择器
需要通过某些术语从孩子处进行搜索,说明: 若子项的名称不为空或不为NULL,则我们将术语与子项的名称进行比较,否则-将术语与父项的名称进行比较 比如:Django查询条件字段选择器,django,conditional,Django,Conditional,需要通过某些术语从孩子处进行搜索,说明: 若子项的名称不为空或不为NULL,则我们将术语与子项的名称进行比较,否则-将术语与父项的名称进行比较 比如: class Parent(models.Model): name = models.CharField(max_length=255, blank=False) class Child(models.Model): parent = models.ForeignKey(Warehouse, related_name="child
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)
以便:
search_result = Child.objects.filter(
if
Q(name__isnull=True) | Q(name='')
then
parent__name__icontains=term
else
name__icontains=term
)
按术语smith搜索的结果如下:
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]
可以使用多个带有符号的Q对象 这意味着匹配Qname_uuisnull=True | Qname=&Qparent_uuuname_uuuicontains=term 此条件或匹配项Qname\uuuu isnull=False&Qname\uuuuu icontains=term
参考:杜德写一些解释,添加一些你的作品。
name = "smith"
Child.objects.filter(Q(name__iexact=name) or Q(name=None) & Q(parent__name__iexact=name))
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))
)