> I have a qset object like this:
>
> qset = (
> Q(dst__contains=company.phone) |
> Q(dst__contains=company.cellphone) |
> Q(dst__contains=company.fax) |
> Q(src__contains=company.phone) |
> Q(src__contains=company.cellphone) |
> Q(src__contains=company.fax)
> )
>
> If a company has a None value in one of these fields, I get a "Cannot
> use None as a query value" error.
>
> I would want to add Q objects dynamically depending on the situation. Is
> this possible?
Just do it in a loop (knowing about dict expansion with the "**"
helps):
items = (
("dst", company.phone),
("dst", company.cellphone),
("dst", company.fax),
("src", company.phone),
("src", company.cellphone),
("src", company.fax),
)
qset = Q()
for name, value in items:
if value is None: continue
qset |= Q(**{"%s__contains" % name : value})
This might even be reducible to
qset = Q()
for field1 in ("phone", "cellphone", "fax"):
value = getattr(company, field1)
if value is None: continue
for field2 in ("src", "dst"):
qset |= Q(**{"%s__contains" % field2: value})
You might also want to check that the results have at least *one*
value (that at least one of ph/cell/fax was non-None)
-tim
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---